javascript函数new Date()不起作用

时间:2013-05-27 04:22:38

标签: php javascript

我的问题如下: 我想在我的网站上显示尼泊尔标准时间,所以我设置了我的默认时区 网站到'Asia / kathmandu'使用命令:php_value date.timezone'Asia / kathmandu'在htaccess文件中。

当我使用任何php函数(如strftime()或date())显示时间时,它会显示尼泊尔标准时间, 但是当我使用javascript函数new Date(<?php echo time()*1000; ?>)时,它会显示出来 我用于查看我的网站的个人电脑的时间。 如何使用javascript日期函数显示正确的时间?有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:1)

您的问题是因为javascript(实际上是ECMAScript)日期对象基于UTC time value。当你这样做时:

new Date(<?php echo time()*1000; ?>)

您将UTC毫秒时间值传递给Date构造函数,然后构造函数创建日期对象。当您使用常用的Date方法格式化字符串,或使用Date.prototpye.toString或Date.prototype.toLocaleString时,您将获得基于客户端区域设置的字符串。请注意,所有这些字符串都是依赖于实现的,并且对于 locale 版本而言差异很大。

如果您需要服务器的时区,请使用服务器进行设置。或者您可以发送时区偏移(以分钟为单位)以应用于当地时间以返回尼泊尔标准时间(UTC + 5:45)。请注意,在ECMAScript中,时区偏移是要添加到本地时间以获取UTC的分钟数,而定义要添加到UTC以获取本地时间的分钟数的偏移量更为正常。

所以要获得NST:

function toNST(timeValue) {

    function z(n) {return (n<10? '0' : '') + n}
    var d = new Date();
    var nstOffset = 5 * 60 + 45;
    d.setMinutes(d.getMinutes() + d.getTimezoneOffset() + nstOffset);

    return z(d.getHours()) + ':' + z(d.getMinutes()) + ':' + z(d.getSeconds());
}

alert(toNST(+(new Date())));  // about 11:07:17 at the moment

答案 1 :(得分:0)

使用

new Date(Date.NPT(year, month, day, hour, minute, second))

答案 2 :(得分:0)

通过服务器的ajax调用时间。这具有更好的代码维护的优点。如果您再次更改时间(例如,如果您想将代码用于其他位置),则只需更改.haccess中的时间。