如何理解客户端脚本中时区的时钟时间

时间:2017-09-21 11:51:26

标签: javascript timezone

我有以下Javascript代码行:

var showTime = new Date( 'Oct 15, 2017 19:45:00' ).getTime(); // October 15, 2017 at 7:45 p.m. ET or 4:45 p.m. PT

我现在在ET时区(GMT-5或美洲/纽约)。所以我将showTime变量设置为ET。但是,我希望showTime var实际上反映的是太平洋海岸时间早3小时 - 在这种情况下是下午4:45。 Pac时间。我希望时间在全球得到修复和认可,并且不会根据当地时区进行抵消。

showTime变量在全球各个时区的处理方式是否有所不同?如果根据当地机器的时区进行处理,您如何锁定时间为10/15/17,下午7:45。 ET普遍吗?

感谢。

2 个答案:

答案 0 :(得分:1)

JavaScript Date对象的getTime()方法返回UTC自1970年1月1日以来的毫秒数。这是通用时间,与当前用户的区域设置无关。

代码中唯一依赖于时区的部分是Date对象的实例化。

这使用当前用户的时区:

var showTime = new Date( 'Oct 15, 2017 19:45:00' ) // 1508114700000 - I'm in CDT currently.

由于您希望美国太平洋时区的时间,您应该将时区信息添加到日期字符串(10月15日仍然是白天时间,所以我使用的是PDT而不是PST,这是GMT-7) :

var showTime = new Date( 'Oct 15, 2017 19:45:00 GMT-0700' ) // 1508121900000

该字符串是特定于实现的,可能会破坏不同的浏览器和操作系统。支持ECMAScript 5的较新浏览器(不是IE 8)已经标准化了简化的ISO 8601(参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#Browser_compatibilityhttps://msdn.microsoft.com/en-us/library/ff743760%28v=vs.94%29.aspx)。该字符串看起来像:

var showTime = new Date( '2017-10-15T19:45:00-07:00' ) // 1508121900000

ISO 8601字符串将是最好的版本,如果您的项目只能支持ECMAScript 5实现(http://kangax.github.io/compat-table/es5/)。

答案 1 :(得分:0)

moment.tz.guess()

您获得服务器时区并消磨时间

这是bower package" moment-timezone":" ^ 0.5.7",