2014-04-28 172 views
1

我遇到了一个奇怪的问题。我使用Javascript将我转换为毫秒的日期发送给我的控制器。在那里,我将毫秒转换为PHP中的时间戳。它似乎得到的日期部分是正确的,但时间完全关闭。任何人都可以告诉我我错过了什么?代码如下。将日期转换为以毫秒为单位的日期

的javascript

var d = new Date("13 October 2014 11:13:00");  
document.write(d.getTime() + " milliseconds since 1970/01/01"); 

结果

1413191580000 

PHP

echo date("Y-m-d H:i:s", 1413191580000/1000); 

结果

2014-10-13 02:13:00 
+6

看起来他们正在使用不同的时区。 – jeroen

+0

是浏览器和你的服务器上的时区相同吗? – Ibu

回答

5

我猜这是因为你有一个与客户端返回的不同时区的日期比服务器。 JavaScript的Date.prototype.getTime()根据ECMAScript标准(§15.9.1.1)返回UTC时间戳。标准化客户端和服务器之间的时区,然后您可以在两者中使日期相同。我总是在服务器上处理UTC的日期,然后执行客户端时区本地化。

0

UNIX风格的日期/时间(毫秒自1970-1-1)使用UTC(又名格林威治标准时间,祖鲁语)时区。问题在于,许多方法通过将该日期/时间转换为当地时区来“帮助”您,同时还考虑到夏令时。因此,如果DST生效,那么冬天创建的日期/时间将在夏季提前一个小时显示。

通常,您将无法控制客户端或服务器时区设置,因此解决方案应了解转换问题。不幸的是,没有简单的解决方案。