如何将带有日期和时间AM / PM的字符串转换为24小时的mysql时间戳格式

时间:2015-01-02 22:53:06

标签: php mysql date datetime

我正在尝试将日期和时间插入到具有以下 dd / mm / yyyy hh:mm:ss AM / PM 格式的字符串的mysql datetime字段中:

20/10/2014 05:39 PM

20/10/2014 05:39 AM

我知道MYSQL时间戳格式为yyyy-mm-dd hh:mm:ss或 0000-00-00:00:00:00

所以,如果我这样做:

$s = substr("20/10/2014 05:39 PM", 0, 10);
$h = date("G:i", strtotime($s));
list($day, $month, $year, $hour, $minute) = split('[/ :]', "20/10/2014 05:39 PM"); 
echo $d1me = $year . '-' . $month. '-' .  $day . ' ' . $h;

我得到2014-10-20 19:00

所以我想date_default_timezone_set()函数存在问题,如何解决这个问题并得到预期结果?

20/10/2014 05:39 PM     ->   2014-10-20 17:39:00

20/10/2014 05:39 AM     ->   2014-10-20 05:39:00

怎么做?

5 个答案:

答案 0 :(得分:11)

MySQL已经知道如何使用STR_TO_DATE() function结合DATE_FORMAT()使用的格式字符串本地解析许多不同类型的日期字符串。

所以,我根本不会在这个过程中涉及PHP,而是让MySQL自己解析输入。

您需要使用的格式字符串为%d/%m/%Y %h:%i %p,其中%p代表AM/PM

您可以在INSERT语句中使用整个表达式,直接从PHP传递字符串,假设您已经验证了它们的格式。

INSERT INTO your_table (timestamp_column) VALUES (STR_TO_DATE('20/10/2014 05:39 PM', '%d/%m/%Y %h:%i %p'));

...会正确地将DATETIME2014-10-20 17:39:00插入到您的表格中。

如果您真的更喜欢先在PHP中使用,请使用格式字符串'd/m/Y H:i A'

使用DateTime::createFromFormat()(PHP 5.3+)
$d = DateTime::createFromFormat('d/m/Y H:i A', '20/10/2014 05:39 PM');
var_dump($d);

class DateTime#2 (3) {
  public $date =>
  string(26) "2014-10-20 17:39:00.000000"
  public $timezone_type =>
  int(3)
  public $timezone =>
  string(15) "America/Chicago"

要从中获取MySQL格式的日期,

echo $d->format('Y-m-d H:i:s');
// 2014-10-20 17:39:00

如果您处于非常不幸的情况下,使用早于5.3的PHP版本,您可以使用strptime()获得类似的结果,但是您需要将其数组输出汇编到MySQL中字符串格式。

答案 1 :(得分:3)

这应该适合你:

<?php

    $input = "20/10/2014 05:39 AM";  //20/10/2014 05:39 PM

    list($day, $month, $year, $hour, $minute, $dayType) = preg_split('/[\/\s:]+/', $input); 
    echo $d1me = $year . '-' . $month. '-' .  $day . ' ' . ($dayType == "PM"?$hour+12: $hour) . ":" . $minute . ":00";

?>

输出:

2014-10-20 05:39:00  //2014-10-20 17:39:00

答案 2 :(得分:2)

我认为您可以使用以下代码。这更容易理解:

UPDATE `operations_per_assembly` PAS
JOIN `operations` OPE ON OPE.`id` = PAS.`operation_id`
SET PAS.`is_mechanical` = '4'
WHERE OPE.repair_type_id = 3

答案 3 :(得分:1)

如果您使用的是php,这是更好的方法

echo date('Y-m-d H:i', strtotime('20/10/2014 05:39 PM'));

答案 4 :(得分:0)

  

echo date(“ Y-m-d H:i:s”,strtotime(“ 20-10-2014 05:39 PM”));

使用上述代码-但请记住,输入日期中用“-”代替“ /”。