gpt4 book ai didi

javascript - 忽略/不转换时区?

转载 作者:行者123 更新时间:2023-12-02 14:11:42 27 4
gpt4 key购买 nike

我的页面工作正常,并按预期显示日期和时间,直到我不得不添加 new Date() 以避免 deprecation warning 。现在我的约会比应有的时间晚了 5 个小时。

enter image description here

我该如何解决这个问题? vdv 均应为 12:14:26,在本例中,fn 应为“秒前”。

完整代码如下:

var k = key;
var v = obj[key];
var vd = Date.parse(obj[key]));
if (moment(vd).isValid()) {
var fn = moment(vd).fromNow();
v = fn;
}
return {
name: k,
value: v
};

我根据 this post 尝试了以下操作,但它带回了 momentjs 弃用警告:

var vd = new Date(Date.parse(obj[key])).toUTCString();

(仍然不起作用)

___________________________________________________________________________________

线程评论会很酷

What happens if you just run moment(v)? Should work. – Maggie Pint

它确实有效,但我收到了弃用警告。

I just looked closer. The format of V is ISO8601 with offset, so you shouldn't be getting a deprecation if you just call moment(v). If you are, try moment(v, moment.ISO_8601)Maggie Pint

再次,有效,但我仍然收到弃用警告。

instead of var vd = new Date(Date.parse(obj[key])).toUTCString(); did you try var vd = new Date(Date.parse(obj[key])).toISOString(); ? or even simplier var vd = Date.parse(obj[key])user3

使用.toISOString(),它会输出“无效日期”。 var vd = Date.parse(obj[key]) 是我最初的,它按预期工作,但我收到警告。

Your v string appears to use ISO8601 format already? Maybe append the Z, or ask moment to recognise it automatically as UTC when timezone info is missing – Bergi

我刚刚尝试了 var vd = new Date(Date.parse(obj[key] + "Z")); 它有效!

最佳答案

在您的示例中,您将 v 的值作为 ISO8601 字符串传递,未指定任何偏移量。您实际上谈论的时间点是不明确的。

因为changes in the ECMAScript specification ,该值将被某些浏览器解释为 UTC,而被其他浏览器解释为本地时间。

避免这种歧义的方法是使用日期构造函数。无论何时使用 new DateDate.parse,您都会引入潜在的行为差异。只需使用 moment 自己的解析器,并具体说明您的意图。

// your input
var v = "2016-09-14T12:14:26.149";

// pick only one of these:
var m = moment(v); // input is local time
var m = moment.utc(v) // input is UTC

// then proceed as normal
if (m.isValid()) {
var fn = m.fromNow();
// etc.
}

如果输入位于其他时区,或者与 UTC 有其他特定的固定偏移,那么您可以使用各种其他选项来构造 moment 对象。但实际上,不要依赖 Date 对象来进行解析。这就是弃用消息的全部要点。

如果输入始终采用预期格式(您正在寻找无效输入等),那么您应该指定预期格式,以便您不要收到弃用警告。例如:

var m = moment.utc(v, "YYYY-MM-DD[T]HH:mm:ss.SSS");

此特定格式也可用作常量:

var m = moment.utc(v, moment.ISO_8601);

这一点以及更多内容都已阐明 in the Moment documentation .

关于javascript - 忽略/不转换时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39496383/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com