如何将Moment.js日期转换为用户的本地时区?

oli*_*ver 67 javascript timezone date momentjs

我使用Moment.js和Moment-Timezone框架,并且有一个Moment.js日期对象,该对象明确地在UTC时区中.如何将其转换为浏览器的当前时区?

var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC"); var localDate = ???

如果我能找到用户的本地时区就好了; 或者我想将日期对象转换为另一个只使用"本地时区"的数据对象,无论实际是什么.

Mat*_*int 118

您不需要为此使用时刻时区.主要的moment.js库具有使用UTC和本地时区的全部功能.

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).local();
Run Code Online (Sandbox Code Playgroud)

从那里,您可以使用您可能期望的任何功能:

var s = localDate.format("YYYY-MM-DD HH:mm:ss");
var d = localDate.toDate();
// etc...
Run Code Online (Sandbox Code Playgroud)

需要注意的是通过传递testDateUtc,这是一个moment对象,回到moment()构造函数,它创建了一个克隆.否则,当您调用时.local(),它也会更改testDateUtc值,而不仅仅是localDate值.时刻是可变的.

另请注意,如果您的原始输入包含时区偏移量(如+00:00或)Z,则可以直接使用它进行解析moment.你不需要使用.utc.local.例如:

var localDate = moment("2015-01-30T10:00:00Z");
Run Code Online (Sandbox Code Playgroud)

  • 你应该知道这种方法不考虑DST偏移,使用`moment-timezone`库更安全 (3认同)
  • @Jaime不是真的.`local`确实考虑了DST. (2认同)
  • 本地规则来自浏览器.因此,只要本地时区包含DST,时刻就会使用它. (2认同)

And*_*son 16

var dateFormat = 'YYYY-DD-MM HH:mm:ss';
var testDateUtc = moment.utc('2015-01-30 10:00:00');
var localDate = testDateUtc.local();
console.log(localDate.format(dateFormat)); // 2015-30-01 02:00:00
Run Code Online (Sandbox Code Playgroud)
  1. 定义您的日期格式.
  2. 创建一个时刻对象,并在对象上将UTC标志设置为true.
  3. 创建从原始时刻对象转换的本地化时刻对象.
  4. 从本地化的时刻对象返回格式化的字符串.

请参阅:http://momentjs.com/docs/#/manipulating/local/


say*_*yan 7

这是我所做的:

var timestamp = moment.unix({{ time }});
var utcOffset = moment().utcOffset();
var local_time = timestamp.add(utcOffset, "minutes");
var dateString = local_time.fromNow();
Run Code Online (Sandbox Code Playgroud)

{{ time }}UTC 时间戳在哪里。


Ale*_*ikh 5

使用 utcOffset 函数。

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).utcOffset(10 * 60); //set timezone offset in minutes
console.log(localDate.format()); //2015-01-30T20:00:00+10:00
Run Code Online (Sandbox Code Playgroud)