从一个时区到格林威治标准时间的开始

时间:2018-03-27 18:08:47

标签: javascript momentjs

我正在使用时区时区库来构建一个需要相对于各种时区的UI。

我正在接受一个时区的输入,即" America / Chicago"并且需要在GMT中获得一天的开始。

例如,如果今天是芝加哥时间3月27日上午9点(格林尼治标准时间下午2点),我需要在3月27日凌晨00:00的时间段内获取日期。

我正在使用moment.tz("America/Chicago").startOf('day'),但我一直在Tue Mar 27 2018 01:00:00 GMT-0400 (EDT)。知道怎么做吗?

由于

1 个答案:

答案 0 :(得分:2)

// This part you are already doing correctly.
// You get back a Moment object representing the start of the current day in Chicago:

var m = moment.tz("America/Chicago").startOf('day');
  

我需要在纪元秒中获取日期

// Ok, so simply now get the associated Unix Time
var timestamp = m.unix();

另请注意,正确的术语是“Unix Time”,而不是“epoch seconds” 请参阅我的博文:"Please don't call it Epoch Time"

  

...但我不断获得Tue Mar 27 2018 01:00:00 GMT-0400 (EDT)

您可能正在查看_dDate对象,或者更确切地说是一个对象的字符串表示。别。有关详细信息,请参阅this Moment.js documentation

根据你的评论:

  

我需要在特定时区拍摄当前时间。然后我需要将该时间转换为GMT中的相应日期。最后,我需要获得GMT日的午夜纪元时间戳。

这与你最初的要求有点不同,但它会是这样的:

var timestamp = moment.utc().startOf('day').unix();

请注意,此操作涉及另一个时区没有任何意义。从逻辑上讲,当要求“现在在时区A转换为时区B”时,它与要求“现在在时区B中”相同。换句话说,即使存在时区,您也会获得相同的值:

var timestamp = moment.tz('America/Chicago').utc().startOf('day').unix();

所以你最好离开时区。