Php 如何从<;选择>;进入mysql并让它输出am/pm?

Php 如何从<;选择>;进入mysql并让它输出am/pm?,php,mysql,forms,Php,Mysql,Forms,嘿,伙计们,我用一个包含时间的输入来做这个表单,我想这样做,当用户选择时间(例如8:30 AM)时,它将存储在mysql中,并由php输出精确的时间(8:30 AM) 这是表格。一个简单的选择按钮,时间增量为30 主要问题是我不知道mysql如何识别它是AM/PM 我应该为select字段输入什么值,如何将其插入mysql数据库,并让mysql或php识别是凌晨1:00还是下午1:00。mysql中是否存在某种24小时时钟,使其能够识别是否为AM/PM?使用: 时间 一段时间。范围为“-838

嘿,伙计们,我用一个包含时间的输入来做这个表单,我想这样做,当用户选择时间(例如8:30 AM)时,它将存储在mysql中,并由php输出精确的时间(8:30 AM)

这是表格。一个简单的选择按钮,时间增量为30

主要问题是我不知道mysql如何识别它是AM/PM

我应该为select字段输入什么值,如何将其插入mysql数据库,并让mysql或php识别是凌晨1:00还是下午1:00。mysql中是否存在某种24小时时钟,使其能够识别是否为AM/PM?

使用:

时间

一段时间。范围为“-838:59:59”到“838:59:59”。MySQL以“HH:MM:SS”格式显示时间值,但允许您使用字符串或数字为时间列赋值

它将很好地解析select选项中的值


编辑:使用示例:

// saving in the db
$sql = "
  INSERT INTO table_name SET
  # ...
  name_of_the_time_column = '" . mysql_real_escape_string($_POST['start_time']) . "'";

// retrieving from the db
$sql = "
  SELECT id, ..., TIME_FORMAT(name_of_the_time_column, '%h:%i:%s %p') AS formatted_time
  FROM table_name
  # ...
  ";
未测试:

INSERT INTO myTable
SET time = TIME(STR_TO_DATE('8:30:00 AM','%h:%m:%s %p'))

以下是MySQL的时间/日期信息。我认为
TIME
类型最适合您,因为您不需要日期,而且您的值格式应该很适合。我想你可以像那样把它们当作弦来放


在通过表单提交或ajax提交并且您的响应PHP页面接管之后,使用PHP中的以下字符串执行查询:
“在表中插入(userId、time等)值(…,“$inTime”,…)”

然后重复它,因为你想让下一页重复它


对评论的回应 我想你的意思是说,当你稍后回显时,你希望
13:00:00
1:00 PM
,对吗

对于PHP或MySQL(下面是PHP,上面是MySQL),您可能可以使用时间函数做一些事情,但我不知道如何使用内存,这很简单,您可以自己做。


PS-13:00:00是下午1点,而不是上午。

mysql如何知道现在是上午还是下午?或者我将如何输出它。例如,我在我的选择字段中有13:00:00的值,我如何使它以13:00:00的值而不是13:00或1:00解析出1:00 AM。@Ben,时间类型将时间存储在24小时系统中,因此如果从选择中保存
14:00:00
,它将知道是PM,如果保存
2:00:00
,它将知道是AM。如果您想以AM/PM格式返回时间,您可以使用。我不需要使用php函数以我想要的格式输出时间,比如strotime()…无法使其正常工作though@Ben,仅当需要时间戳时才需要strotime。我不确定你现在问的是什么。您通常可以将从select中获取的
'14:30:00'
保存为时间列中的值。那里不需要php处理。当您从数据库中获取时间时,可以使用
TIME\u格式(时间列的名称,'%h:%i:%s%p')
以“am/pm”格式的字符串获取时间。我理解正确了吗?好吧,假设我在数据库中插入了14:30:00,我想使用select语句“select*FROM table”,我想让php用时间来回显列。TIME_格式是一个mysql函数,由于我的查询是“SELECT*FROM TABLE”,使用php函数解析时间列并回显正确的时间不是更有效吗?同样的问题,mysql如何知道时间是AM还是PM?或者我将如何输出它。例如,我在我的选择字段中有13:00:00的值,我如何使它以13:00:00的值解析出1:00 AM,而不是13:00或1:00。MySQL以24小时样式存储。只有当您希望稍后输出它,并且希望使用12hr w/AM/PMdoes strottime()以相同的方式输出它时,它才会成为问题?我似乎不知道如何使用该函数将其格式设置为1:00 pm,但我是否能够将该INTEGET格式设置为1:00 pm,或者您的代码是唯一的方式….?一旦您获得时间戳,您就可以使用它来获得任何您喜欢的格式。请注意,
%m
说明符是数月,而不是数分钟。使用
%i
分钟。
$time = //get time field from MySQL
list($h, $m, $s) = explode($time, ':');
if ($h > 12) {$h -= 12; $amOrPm = 'PM'}; else {$amOrPm = 'AM';}
if ($h == 0) {$h = 12;}

echo "$h:$m $amOrPm";