在javascript / momentjs中创建日期时忽略时区


75

我正在为东海岸的某个事物创建时间表,并且需要创建一个始终为此时间返回日期对象/时间戳的日期。

因此,如果我在18:00在巴黎打开页面,"new myDate()"则应返回12:00。

关于如何使用momentJS或仅使用JavaScript可以做到这一点的任何建议?最终结果应该是一个javascript Date对象。

Answers:


139

您可以通过使用moment.js来做到这一点moment.utc()

http://momentjs.com/docs/#/parsing/utc/

moment([2011, 10, 8, 5]).format(); // different output based on timezone
moment.utc([2011, 10, 8, 5]).format(); // same output for all timezones

moment.utc工作方式是通过在内部设置一个标记来getUTCMinutes代替getMinutes,因此所有时区的输出都相同。


1
啊,没看到那个。您将如何为此添加正确的时区偏移量?我设法用js做到了,但我更喜欢momentjs。我尝试了此操作:new Date(moment.utc().add('minutes', -moment().zone()).unix() * 1000),但日期为5小时。
kimpettersen 2012年

您可以通过不使用时区来伪造它。因此,如果日期需要在凌晨5点,只需执行一下moment.utc([年,月,日,5]),然后格式化并显示该日期即可。如果您试图显示特定时区中的日期,它将变得比较棘手,因为您需要根据该时区的DST发生时间来确定偏移量。
timrwood

实验一下moment.utc()。zone(5),让momentjs在内部处理时区偏移。
zacharydl 2014年

4
它不会工作。moment.utc('2014/09/05 12:00')。format()将为您提供'2014-09-05T08:00:00 + 00:00'(取决于时区)moment('2014/09/05 12:00')。format()会为您提供'2014-09-05T12:00:00 + 04:00'(包括时区信息)忽略时区的最佳方法是指定自己的格式:moment('2014 / 09/05 12:00')。format('YYYY-MM-DD [T] HH:mm:ss')
Roman Pushkin

1
@RomanPushkin看到警告在momentjs.com/docs/#/parsing/string。浏览器对字符串解析的支持不一致,因此添加格式可以让您Date.utc(year, month, date, etc)
轻松找出

13

如果要完全忽略时区,可以使用以下方法:

  var firstDayStr = '29 January 2014';
  var startAtTime = '10:01:02 AM';
  var localFormat = 'YYYY-MM-DD[T]HH:mm:ss';

  var m = moment(firstDayStr + ' ' + startAtTime).format(localFormat);

  console.log(m);

输出:

2014-01-29T10:01:02 

1
@ M98试试看,它应该可以工作。只是将其作为对矩的争论(...)
罗曼·普希金
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.