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

使用PHP将Javascript时间转换为MySQL格式,javascript,php,mysql,timestamp,Javascript,Php,Mysql,Timestamp,如何使用php将类似于Sun Jul 13 2014 07:00:00 GMT+0200 EET的js日期转换为类似于2014-07-13 07:00:00的MySQL格式 我会尽量提高@akuzminsky的回答。由于date_parse在内部使用strotime来解析日期,因此可以直接使用它,使代码更加灵活 <?php print_r(date_parse("Sun Jul 13 2014 07:00:00 GMT+0200")); ?> Array ( [year] =&g

如何使用php将类似于Sun Jul 13 2014 07:00:00 GMT+0200 EET的js日期转换为类似于2014-07-13 07:00:00的MySQL格式

我会尽量提高@akuzminsky的回答。由于date_parse在内部使用strotime来解析日期,因此可以直接使用它,使代码更加灵活

<?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
    )

)
有一个小缺点,因为您需要设置时区,以便正确使用日期并避免php警告。我将其设置为欧洲/雅典,但您可以找到所有可用的代码

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;

我会尽量提高@akuzminsky的回答。由于date_parse在内部使用strotime来解析日期,因此可以直接使用它,使代码更加灵活

有一个小缺点,因为您需要设置时区,以便正确使用日期并避免php警告。我将其设置为欧洲/雅典,但您可以找到所有可用的代码

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;

由于日期字符串已包含时区,因此无需执行任何特殊操作:

$when = new DateTime('Sun Jul 13 2014 07:00:00 GMT+0200 (EET)');
echo $when->format('Y-m-d H:i:s');
正如注释中有用地指出的,这个字符串实际上包含两位时区信息,UTC+2和EET东欧时间,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());
事实上,我们需要去掉其中一个,例如:

$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');

由于日期字符串已包含时区,因此无需执行任何特殊操作:

$when = new DateTime('Sun Jul 13 2014 07:00:00 GMT+0200 (EET)');
echo $when->format('Y-m-d H:i:s');
正如注释中有用地指出的,这个字符串实际上包含两位时区信息,UTC+2和EET东欧时间,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());
事实上,我们需要去掉其中一个,例如:

$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');
Javascript: 这就是现在的时间,几秒钟内。除以1000可以去掉毫秒

var time = new Date().getTime() / 1000
PHP:使用从JS返回的时间,即整数值

$time = gmdate('H:i:s', time)
Javascript: 这就是现在的时间,几秒钟内。除以1000可以去掉毫秒

var time = new Date().getTime() / 1000
PHP:使用从JS返回的时间,即整数值

$time = gmdate('H:i:s', time)

非常感谢。工作得很有魅力。我想这对柏林不起作用。这是我的js日期:周一2020年5月4日00:00:00 GMT+0200中欧夏季时间。当尝试创建新的DateTime时,我收到错误的双时区规范。@Adam可能是错误消息所说的:您有两个时区。他们半年都是一样的,这并不能改变这一点。如果再加上几个月呢?你想结果是UTC+2还是CEST?@lvaroGonzález目前它们是一样的,我猜js将在今年下半年打印GMT+0100中欧夏季时间。在您的示例中,字符串还有两个时区GMT+0200和EET,但这是出于某种原因而起作用的。@Adam啊,对不起,我没有注意到这一点。有趣的在问题的示例中,PHP实际上忽略了EET部分。也许我们只是碰到了解析器代码中的一个漏洞。谢谢。工作得很有魅力。我想这对柏林不起作用。这是我的js日期:周一2020年5月4日00:00:00 GMT+0200中欧夏季时间。当尝试创建新的DateTime时,我收到错误的双时区规范。@Adam可能是错误消息所说的:您有两个时区。他们半年都是一样的,这并不能改变这一点。如果再加上几个月呢?你想结果是UTC+2还是CEST?@lvaroGonzález目前它们是一样的,我猜js将在今年下半年打印GMT+0100中欧夏季时间。在您的示例中,字符串还有两个时区GMT+0200和EET,但这是出于某种原因而起作用的。@Adam啊,对不起,我没有注意到这一点。有趣的在问题的示例中,PHP实际上忽略了EET部分。也许我们只是碰到了解析器代码中的一个漏洞。