Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将Moment.js日期转换为用户本地时区?_Javascript_Date_Timezone_Momentjs - Fatal编程技术网

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

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库具

我使用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库具有使用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
  • 定义日期格式
  • 创建一个力矩对象,并将对象上的UTC标志设置为true
  • 创建从原始力矩转换而来的本地化力矩对象 反对
  • 从本地化的矩对象返回格式化字符串
  • 请参阅:

    以下是我所做的:

    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)