我遇到了一个奇怪的问题,这个问题引发了一个更大的问题。我将定义最初的问题(这不是真正的问题),然后是由它引起的问题。
我有一个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与太平洋夏令时。
有没有人遇到过这个问题?或者知道如何恰当地解决这个问题?
编辑:请注意,我需要'周五'
的一部分答案 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
)之后的任何内容。