MomentJS 设置时区而不改变时间
MomentJS set timezone without changing time
我正在尝试为 moment.js 中的日期设置时区而不更改时间值
我得到一个 utc 日期:
date.toString() // Sun Sep 27 2015 00:00:00 GMT+0000
而且我需要在不更改时间的情况下设置时区。
Sun Sep 27 2015 00:00:00 GMT-0500
如果我使用 date.utcOffset(moment().utcOffset())
它会添加偏移量:
date.toString() // Sat Sep 26 2015 19:00:00 GMT-0500
我可以
date = moment(date.format("YYYYMMDDHHmmssSSSS"), "YYYYMMDDHHmmssSSSS")
但这似乎是一种低效的方法。
有什么方法可以只改变时区而不改变时间吗?
moment().utcOffset(0).add(moment().utcOffset(), 'minutes').format()
您必须做一些数学运算,如果不进行概要分析,就无法说出哪个最有效。
javascript 日期对象将始终具有本地时区,因此您需要在 moment 对象中工作或进行补偿。
在撰写本文时(时刻 2.22),您可以使用 someLocalMomentVariable.utc(true)
从本地转到 UTC,然后使用 someUtcMomentVariable.local(true)
.
从 UTC 返回到本地
如果您使用 moment.js,请使用 utcOffset
并将 true 作为第二个参数。
date2 = moment(date1).utcOffset('+0400', true)
或者如果您正在使用 moment-timezone,您可以在 moment 对象上使用 tz
函数,第二个参数为 true
。
date1 = moment(date1).tz('Asia/Kolkata', true)
使用时刻时区,如果您可以识别时区,您也可以通过传递 true
标志
来设置它而无需调整时间
const tz = "America/New_York"; // GMT-0500
moment(date).tz(tz, true); // true flag identifies not changing time when updating time zone
文档(虽然它没有解释 boolean
标志)
Converting to Zone
我正在尝试为 moment.js 中的日期设置时区而不更改时间值
我得到一个 utc 日期:
date.toString() // Sun Sep 27 2015 00:00:00 GMT+0000
而且我需要在不更改时间的情况下设置时区。
Sun Sep 27 2015 00:00:00 GMT-0500
如果我使用 date.utcOffset(moment().utcOffset())
它会添加偏移量:
date.toString() // Sat Sep 26 2015 19:00:00 GMT-0500
我可以
date = moment(date.format("YYYYMMDDHHmmssSSSS"), "YYYYMMDDHHmmssSSSS")
但这似乎是一种低效的方法。
有什么方法可以只改变时区而不改变时间吗?
moment().utcOffset(0).add(moment().utcOffset(), 'minutes').format()
您必须做一些数学运算,如果不进行概要分析,就无法说出哪个最有效。
javascript 日期对象将始终具有本地时区,因此您需要在 moment 对象中工作或进行补偿。
在撰写本文时(时刻 2.22),您可以使用 someLocalMomentVariable.utc(true)
从本地转到 UTC,然后使用 someUtcMomentVariable.local(true)
.
如果您使用 moment.js,请使用 utcOffset
并将 true 作为第二个参数。
date2 = moment(date1).utcOffset('+0400', true)
或者如果您正在使用 moment-timezone,您可以在 moment 对象上使用 tz
函数,第二个参数为 true
。
date1 = moment(date1).tz('Asia/Kolkata', true)
使用时刻时区,如果您可以识别时区,您也可以通过传递 true
标志
const tz = "America/New_York"; // GMT-0500
moment(date).tz(tz, true); // true flag identifies not changing time when updating time zone
文档(虽然它没有解释 boolean
标志)
Converting to Zone