使用PHP将Javascript时间转换为MySQL格式

Convert Javascript time to MySQL format using PHP

本文关键字:MySQL 格式 转换 时间 PHP Javascript 使用      更新时间:2023-09-26

如何使用php将js日期(如Sun Jul 13 2014 07:00:00 GMT+0200 (EET))转换为MySQL格式(如2014-07-13 07:00:00) ?

由于日期字符串已经包含时区,因此不需要做任何特殊操作:

$when = new DateTime('Sun Jul 13 2014 07:00:00 GMT+0200 (EET)');
echo $when->format('Y-m-d H:i:s');

正如在注释中所指出的,这个字符串实际上包含两个时区信息,UTC + 2EET(东欧时间),PHP基本上忽略了第二个。在这个例子中可以更好地发现:

var_dump(new DateTime('Sun Jul 13 2014 07:00:00 GMT+0200 (EET)'), DateTime::getLastErrors());
var_dump(new DateTime('Sun Jul 13 2014 07:00:00 GMT+0200'), DateTime::getLastErrors());
var_dump(new DateTime('Sun Jul 13 2014 07:00:00 (EET)'), DateTime::getLastErrors());
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2014-07-13 07:00:00.000000"
  ["timezone_type"]=>
  int(1)
  ["timezone"]=>
  string(6) "+02:00"
}
array(4) {
  ["warning_count"]=>
  int(1)
  ["warnings"]=>
  array(1) {
    [34]=>
    string(29) "Double timezone specification"
  }
  ["error_count"]=>
  int(0)
  ["errors"]=>
  array(0) {
  }
}
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2014-07-13 07:00:00.000000"
  ["timezone_type"]=>
  int(1)
  ["timezone"]=>
  string(6) "+02:00"
}
array(4) {
  ["warning_count"]=>
  int(0)
  ["warnings"]=>
  array(0) {
  }
  ["error_count"]=>
  int(0)
  ["errors"]=>
  array(0) {
  }
}
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2014-07-13 07:00:00.000000"
  ["timezone_type"]=>
  int(2)
  ["timezone"]=>
  string(3) "EET"
}
array(4) {
  ["warning_count"]=>
  int(0)
  ["warnings"]=>
  array(0) {
  }
  ["error_count"]=>
  int(0)
  ["errors"]=>
  array(0) {
  }
}

我们实际上需要去掉其中一个,例如:

$js_date_string = 'Sun Jul 13 2014 07:00:00 GMT+0200 (EET)';
// Regular expression is shown for illustration purposes, it's probably wrong!
$tmp_date_string = preg_replace('/ GMT'+'d{4}/ui', '', $js_date_string);
$when = new DateTime($tmp_date_string);
var_dump($when, DateTime::getLastErrors());
echo $when->format('Y-m-d H:i:s');
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2014-07-13 07:00:00.000000"
  ["timezone_type"]=>
  int(2)
  ["timezone"]=>
  string(3) "EET"
}
array(4) {
  ["warning_count"]=>
  int(0)
  ["warnings"]=>
  array(0) {
  }
  ["error_count"]=>
  int(0)
  ["errors"]=>
  array(0) {
  }
}
2014-07-13 07:00:00

我会尽量加强@akuzminsky的回答。由于date_parse内部使用strtotime来解析日期,您可以直接使用它,使您的代码更灵活。

有一个小缺点,因为您需要设置时区,以便正确使用date并避免php警告。我将其设置为Europe/Athens,但你可以在这里找到所有可用的代码。

date_default_timezone_set("Europe/Athens");
$unixTimeStamp = strtotime("Sun Jul 13 2014 07:00:00 GMT+0200 (EET)");
$newFormat = date('Y-m-d H:i:s', $unixTimeStamp );
echo $newFormat;

以秒为单位得到这个时间。除以1000可以去掉毫秒数

var time = new Date().getTime() / 1000
PHP:使用从JS返回的整数值 的时间
$time = gmdate('H:i:s', time)
<?php
print_r(date_parse("Sun Jul 13 2014 07:00:00 GMT+0200"));
?>

Array
(
[year] => 2014
[month] => 7
[day] => 13
[hour] => 7
[minute] => 0
[second] => 0
[fraction] => 0
[warning_count] => 0
[warnings] => Array
    (
    )
[error_count] => 0
[errors] => Array
    (
    )
[is_localtime] => 1
[zone_type] => 1
[zone] => -120
[is_dst] =>
[relative] => Array
    (
        [year] => 0
        [month] => 0
        [day] => 0
        [hour] => 0
        [minute] => 0
        [second] => 0
        [weekday] => 0
    )
)