Javascript 如何将Moment.js日期转换为用户本地时区?
我使用Moment.js和Moment Timezone框架,并有一个Moment.js date对象,它显式地位于UTC时区中。如何将其转换为浏览器的当前时区Javascript 如何将Moment.js日期转换为用户本地时区?,javascript,date,timezone,momentjs,Javascript,Date,Timezone,Momentjs,我使用Moment.js和Moment Timezone框架,并有一个Moment.js date对象,它显式地位于UTC时区中。如何将其转换为浏览器的当前时区 var testDateUtc=moment.tz(“2015-01-30 10:00:00”,“UTC”); var localDate=??? 所以如果我能找出用户所在的时区就好了;或者,我想将date对象转换成另一个数据对象,该对象只使用“本地时区”,而不管它实际上是什么。您不需要为此使用矩时区。main moment.js库具
var testDateUtc=moment.tz(“2015-01-30 10:00:00”,“UTC”);
var localDate=???
所以如果我能找出用户所在的时区就好了;或者,我想将date对象转换成另一个数据对象,该对象只使用“本地时区”,而不管它实际上是什么。您不需要为此使用矩时区。main moment.js库具有使用UTC和本地时区的完整功能
var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).local();
从那里,您可以使用您可能期望的任何功能:
var s = localDate.format("YYYY-MM-DD HH:mm:ss");
var d = localDate.toDate();
// etc...
请注意,通过将testDateUtc
(一个moment
对象)传递回moment()
构造函数,它将创建一个克隆。否则,当您调用.local()
时,它还会更改testDateUtc
值,而不仅仅是localDate
值。时刻是可变的
还请注意,如果原始输入包含时区偏移量,如+00:00
或Z
,则可以直接使用矩
对其进行解析。您不需要使用.utc
或.local
。例如:
var localDate = moment("2015-01-30T10:00:00Z");
使用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
var timestamp = moment.unix({{ time }});
var utcOffset = moment().utcOffset();
var local_time = timestamp.add(utcOffset, "minutes");
var dateString = local_time.fromNow();
其中
{{time}}
是utc时间戳。获取用户时区的最佳方法是使用时刻时区
const time = moment.tz("2021-04-14T02:08:10.370Z")
const localtz = moment.tz.guess()
const date = time.clone().tz(localtz)
const formatDate = moment(date).format('MMMM Do YYYY, h:mm:ss A z')
console.log(formatDate)
通过这种方式,您将能够将时间转换为本地时区特定的时间您应该知道,这种方法不考虑DST偏移,使用
时刻时区更安全
library@Jaime不是真的local
确实考虑了DST。你可以自己检查,例如从EST
翻译到CET
,如果你想像NY
->Madrid
,我明天会举个例子。我接受反例:)你是对的,没有时刻时区,时刻不能进行那种转换。但是,它可以在UTC和本地之间正确转换,这是OP要求的。本地规则来自浏览器。因此,只要本地时区包括DST,moment就会使用它。如果它解释了为什么会这样,也许可以参考文档,这个答案会更好。另外,你可能想解释一下这个答案与3月份发布的答案有什么不同…@AndrewHenderson,时间比本地机器时间早了一个小时。为什么会发生这种情况?@RameshPapaganti也许是夏令时?例如PDT与PST。众所周知,Moment会在不同版本之间更改API,尤其是在本地化方面。如果你找到了原因,请告诉我。
const time = moment.tz("2021-04-14T02:08:10.370Z")
const localtz = moment.tz.guess()
const date = time.clone().tz(localtz)
const formatDate = moment(date).format('MMMM Do YYYY, h:mm:ss A z')
console.log(formatDate)