Php 如何让普通用户输入时间和日期,以便将其作为时间戳添加到mysql中?

Php 如何让普通用户输入时间和日期,以便将其作为时间戳添加到mysql中?,php,mysql,Php,Mysql,在用户界面中,我有一个以dd/mm/yyyy格式输入日期的文本字段,还有一个以hh:mm格式输入时间的文本框和另一个指定am或pm的下拉框。所有这三个字段都允许用户手动输入日期、时间和am/pm。根据项目的要求,我更喜欢使用这种原始方法 现在我希望所有这些值都以时间戳格式添加到mysql中,以便更容易获取和操作。请建议我如何才能做到这一点 <? $date = '21'.'/'.'11'.'/'.'2011'; $time = '12'.':'.'00'; $ampm = "am"; $d

在用户界面中,我有一个以dd/mm/yyyy格式输入日期的文本字段,还有一个以hh:mm格式输入时间的文本框和另一个指定am或pm的下拉框。所有这三个字段都允许用户手动输入日期、时间和am/pm。根据项目的要求,我更喜欢使用这种原始方法

现在我希望所有这些值都以时间戳格式添加到mysql中,以便更容易获取和操作。请建议我如何才能做到这一点

<?
$date = '21'.'/'.'11'.'/'.'2011';
$time = '12'.':'.'00';
$ampm = "am";
$dt = DateTime::createFromFormat(
    'd/m/Y h:i a',
 sprintf('%s %s %s', $date, $time, $ampm),
   new DateTimeZone('Country/Region'));



$mysqlDateString = $dt->format('Y-m-d H:i:s');


?>
与正确的格式一起使用,通过将用户输入发送到,例如:

$date = '22/11/2011'; $date_pieces = explode( '/', $date);
$time = '08:35'; $time_pieces = explode( ':', $time);
$am_pm = 'PM';

$mysql_timestamp = date( 'Y-m-d H:i:s', mktime( 
    $time_pieces[0] + ( $am_pm == 'AM' ? -12 : 12), // Hour - Convert AM/PM to 24-hr format
    $time_pieces[1], // Minute
    0, // Second
    $date_pieces[1], // Month
    $date_pieces[0], // Day
    $date_pieces[2])); // year
$unix_timestamp = mktime( 
    $time_pieces[0] + ( $am_pm == 'AM' ? -12 : 12), // Hour - Convert AM/PM to 24-hr format
    $time_pieces[1], // Minute
    0, // Second
    $date_pieces[1], // Month
    $date_pieces[0], // Day
    $date_pieces[2]);
现在$mysql\u timestamp是datetime列的有效条目

如果需要UNIX时间戳,只需删除到日期的调用,如下所示:

$date = '22/11/2011'; $date_pieces = explode( '/', $date);
$time = '08:35'; $time_pieces = explode( ':', $time);
$am_pm = 'PM';

$mysql_timestamp = date( 'Y-m-d H:i:s', mktime( 
    $time_pieces[0] + ( $am_pm == 'AM' ? -12 : 12), // Hour - Convert AM/PM to 24-hr format
    $time_pieces[1], // Minute
    0, // Second
    $date_pieces[1], // Month
    $date_pieces[0], // Day
    $date_pieces[2])); // year
$unix_timestamp = mktime( 
    $time_pieces[0] + ( $am_pm == 'AM' ? -12 : 12), // Hour - Convert AM/PM to 24-hr format
    $time_pieces[1], // Minute
    0, // Second
    $date_pieces[1], // Month
    $date_pieces[0], // Day
    $date_pieces[2]);
编辑:根据Phil下面的评论,确保设置正确的时区。

通过将用户输入发送到,与正确的格式一起使用,如下所示:

$date = '22/11/2011'; $date_pieces = explode( '/', $date);
$time = '08:35'; $time_pieces = explode( ':', $time);
$am_pm = 'PM';

$mysql_timestamp = date( 'Y-m-d H:i:s', mktime( 
    $time_pieces[0] + ( $am_pm == 'AM' ? -12 : 12), // Hour - Convert AM/PM to 24-hr format
    $time_pieces[1], // Minute
    0, // Second
    $date_pieces[1], // Month
    $date_pieces[0], // Day
    $date_pieces[2])); // year
$unix_timestamp = mktime( 
    $time_pieces[0] + ( $am_pm == 'AM' ? -12 : 12), // Hour - Convert AM/PM to 24-hr format
    $time_pieces[1], // Minute
    0, // Second
    $date_pieces[1], // Month
    $date_pieces[0], // Day
    $date_pieces[2]);
现在$mysql\u timestamp是datetime列的有效条目

如果需要UNIX时间戳,只需删除到日期的调用,如下所示:

$date = '22/11/2011'; $date_pieces = explode( '/', $date);
$time = '08:35'; $time_pieces = explode( ':', $time);
$am_pm = 'PM';

$mysql_timestamp = date( 'Y-m-d H:i:s', mktime( 
    $time_pieces[0] + ( $am_pm == 'AM' ? -12 : 12), // Hour - Convert AM/PM to 24-hr format
    $time_pieces[1], // Minute
    0, // Second
    $date_pieces[1], // Month
    $date_pieces[0], // Day
    $date_pieces[2])); // year
$unix_timestamp = mktime( 
    $time_pieces[0] + ( $am_pm == 'AM' ? -12 : 12), // Hour - Convert AM/PM to 24-hr format
    $time_pieces[1], // Minute
    0, // Second
    $date_pieces[1], // Month
    $date_pieces[0], // Day
    $date_pieces[2]);
编辑:根据Phil在下面的评论,确保使用设置了正确的时区。

使用

假设表单字段已发布、大致验证并收集到变量中

// assume $date, $time, $ampm

$dt = DateTime::createFromFormat(
    'd/m/Y h:i a',
    sprintf('%s %s %s', $date, $time, $ampm),
    new DateTimeZone('Country/Region'));

$unixTimestamp = $dt->getTimestamp();

$mysqlDateString = $dt->format('Y-m-d H:i:s');
如果将日期/时间存储为MySQL日期/时间字符串,则可能还应存储时区,否则无法检索准确数据。

使用

假设表单字段已发布、大致验证并收集到变量中

// assume $date, $time, $ampm

$dt = DateTime::createFromFormat(
    'd/m/Y h:i a',
    sprintf('%s %s %s', $date, $time, $ampm),
    new DateTimeZone('Country/Region'));

$unixTimestamp = $dt->getTimestamp();

$mysqlDateString = $dt->format('Y-m-d H:i:s');


如果您将日期/时间存储为MySQL日期/时间字符串,则可能还应存储时区,否则无法检索准确的数据。

大约在时间转换时会有大量信息。在你的情况下,我认为这是可行的。

大约在转换时间有大量的信息。在你的情况下,我想会有用。

@nickb PHP 5.3.0于2009年6月30日发布。我想说已经很久没用了disclaimer@Phil即返回unixtimestap。但是我想把它添加为普通的mysql时间戳。可以像上面那样使用对象吗?nickb的解决方案奏效了@C我已经将MySQL日期字符串版本添加到answer@Phil你可能会想,但是我们仍然有人在使用XP/IE6:我尝试了你的解决方案,phil..但它抛出了一个错误..很可能,我弄错了。。!我已经发布了上面的代码。@nickb PHP5.3.0于2009年6月30日发布。我想说已经很久没用了disclaimer@Phil即返回unixtimestap。但是我想把它添加为普通的mysql时间戳。可以像上面那样使用对象吗?nickb的解决方案奏效了@C我已经将MySQL日期字符串版本添加到answer@Phil你可能会想,但是我们仍然有人在使用XP/IE6:我尝试了你的解决方案,phil..但它抛出了一个错误..很可能,我弄错了。。!我已经发布了上面的代码。应该使用设置时区似乎对我的测试没有影响-你能发布一个例子,说明输入不同的时区时输出是不同的吗?unix时间戳对于不同的时区是不同的。例如,使用您的日期和澳大利亚/墨尔本,我得到1321954500。对于澳大利亚/珀斯,我得到了1321965300,我可能应该使用设置一个时区,这似乎对我的测试没有影响-你能举一个例子,当输入不同的时区时,输出是不同的吗?unix时间戳对于不同的时区是不同的。例如,使用您的日期和澳大利亚/墨尔本,我得到1321954500。对于澳大利亚/珀斯,我得到1321965300