Javascript日期对象在Mac和PC之间是不同的

时间:2017-03-17 23:06:13

标签: javascript php

我遇到了一个奇怪的问题,这个问题引发了一个更大的问题。我将定义最初的问题(这不是真正的问题),然后是由它引起的问题。

我有一个javascript函数,它定义了一个日期变量,并将它作为post请求中的数据发送给php函数:

var currentdate = new Date();

var showDailyEvents = function() {
    $.post(
        '/php/returnEvents.php',
        {
            myDate: currentdate,
            period: "daily"
        },
        "html"
    );
};

showDailyEvents();

当我在Mac上(在所有浏览器上)运行时,currentdate是" Fri Mar 17 2017 15:37:29 GMT-0700(PDT)"。但是,当我在PC上运行它时(特别是Windows 7),当前日期是" Fri Mar 17 2017 15:37:29 GMT-0700(Pacific Daylight Time)"。当这个变量传递给php函数时,我尝试将它转换为如此的时间戳:

$startDay = strtotime($_POST['myDate']);

但是当我检查那个变量时,在Mac中它是1489790249而在PC上则返回false。两台计算机上的变量之间的唯一区别是PDT与太平洋夏令时。

有没有人遇到过这个问题?或者知道如何恰当地解决这个问题?

编辑:请注意,我需要'周五'

的一部分

1 个答案:

答案 0 :(得分:0)

如果您坚持传递日期/时间字符串,DateTime可以选择显式格式:

<?php

$arr = array(
    'Fri Mar 17 2017 15:37:29 GMT-0700 (PDT)',
    'Fri Mar 17 2017 15:37:29 GMT-0700 (Pacific Daylight Time)'
);

foreach($arr as $val){
    $d = DateTime::createFromFormat('D M d Y H:i:s O+', $val);
    if($d !== false){
        echo $val . ": " . $d->getTimeStamp() . "\n";
    }
}
?>

这会产生:

Fri Mar 17 2017 15:37:29 GMT-0700 (PDT): 1489790249
Fri Mar 17 2017 15:37:29 GMT-0700 (Pacific Daylight Time): 1489790249

这里,格式规范中的+意味着跳过了其余的输入,因此有时会忽略时区规范(O)之后的任何内容。