我正在构建一个JavaScript倒计时,它需要依赖于服务器时间,但我无法以跨浏览器的方式将php时间传输到JavaScript。这在所有现代浏览器中都能很好地工作,但在较旧的浏览器中会出现问题(未定义日期)。如果我使用date("Y-m-d H:i:s)
而不是date("Y-m-d'TH:i:s'Z)
,它效果更好,但在IE10 中不行
<?php
switch ($day) {
case 'Sat':
$start = "10";
$stop = "16";
break;
case 'Sun':
$start = "11";
$stop = "16";
break;
default:
$start = "10";
$stop = "19";
break;
}
?>
<script>
jQuery(function(){
var open = new Date("<?php echo date("Y-m-d'TH:i:s'Z",strtotime("today {$start}:00:00")); ?>");
var end = new Date("<?php echo date("Y-m-d'TH:i:s'Z",strtotime("today {$stop}:00:00")); ?>");
var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour * 24;
var start = new Date("<?php echo date("Y-m-d'TH:i:s'Z"); ?>") ;
});
</script>
ECMAScript/JavaScript唯一官方认可的格式是ISO 8601 Extended:
格式如下:
YYYY-MM-DDTHH:mm:ss.sssZ
但是,这是ECMAScript 5的新增功能。以前的版本将支持留给每个供应商来决定。
您可以尝试使用时间戳而不是字符串。
var open = new Date(<?php echo strtotime("today {$start}:00:00") * 1000; ?>);
// ...
var start = new Date(<?php echo time() * 1000; ?>);
JavaScript和PHP都使用基于UTC的时间戳,只是秒(PHP)和毫秒(JS)的差异。
首先,Javascript date()接受毫秒或日期字符串。
毫秒类似于php time()
。
日期字符串应使用以下格式:October 13, 2012 11:13:00
根据您的情况,我建议使用strtotime()
或time()
来返回时间戳,但在传递到javascript之前需要*1000。
参考:W3schools-日期对象参考