gpt4 book ai didi

javascript - 时区解析 inferno

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:53 24 4
gpt4 key购买 nike

我有这个 ISO 日期:

var v = '2013-07-09T13:27:29.000Z';

如果我这样做:

var g = moment(v).format();

控制台给我 g 值作为正确的本地时间 2013-07-08T17:25:08-03:00

但是如果我这样做是为了获得时间:

console.log(moment(g).startOf('day').fromNow());

Moments使用原始v ISO而不是格式化的g来计算时间。

为什么?

编辑:我测试了另一个时间插件 (jquery.timeago),当传递原始 v 值时,同样的错误解析为本地时间。

我在这里做错了什么?此代码在客户端执行,因此所有插件都应该为用户返回正确的本地时间。

编辑 2:关于我正在尝试做的事情的更多相关信息:

var v = notifs.ntime; //2013-07-09T13:27:29.000Z
var m = moment(v).zone(v).format(); // 2013-07-09T13:27:29+00:00 (wrong local)
var m2 = moment(v).format(); // 2013-07-09 10:27:29 (correct local)
var r = moment(v).zone(v).startOf('day').fromNow() // 21 hours ago (wrong)
var r2 = moment(v).startOf('day').fromNow() // 18 hours ago (wrong)
console.log(v);
console.log(m);
console.log(m2);
console.log(r);
console.log(r2);
console.log('-------------------');
/*
2013-07-09T13:27:29.000Z
2013-07-09T13:27:29+00:00
2013-07-09T10:27:29-03:00
21 hours ago
18 hours ago
-------------------

I expected "8 hours ago" as now is 18:10 and (v) was set on 10:27 (m2)
*/

最佳答案

我不太确定我是否符合您的要求。

通过使用您的 g 变量,您基本上是这样做的:

moment(moment(v).format()).startOf('day').fromNow()

这有点多余。这是完全一样的事情:

moment(v).startOf('day').fromNow()

这会告诉您从现在到 v 落在的本地日开始之间过去了多长时间。

如果您正在寻找从现在到 v 所在的 UTC 日开始之间经过了多长时间,请改用以下代码:

moment.utc(v).startOf('day').fromNow()

或者使用稍微不同的语法,但效果相同:

moment(v).utc().startOf('day').fromNow()

如果您正在寻找其他内容,请说明。

演练

让我们来看看当我在我的计算机上运行您的原始代码时会发生什么。我在美国亚利桑那州,UTC-7 没有夏令时。

// we'll start with the string you provided
var v = '2013-07-09T13:27:29.000Z';

// and the redundant moment, but we'll take a look at the formatting
var g = moment(v).format();

console.log(g); // 2013-07-09T06:27:29-07:00
console.log(moment(g).format()) // 2013-07-09T06:27:29-07:00 (it didn't change)

// start of the local day is midnight in the local time zone
console.log(moment(g).startOf('day').format()) // 2013-07-09T00:00:00-07:00

// here's my time right now
console.log(moment().format()) // 2013-07-09T13:56:54-07:00

// and your final bit of code
console.log(moment(g).startOf('day').fromNow()); // 14 hours ago

如您所见,它运行正常,在确定一天的开始时使用本地时区。当然,当你在不同的时区运行它时,它会返回不同的结果。那是因为每个时区都有自己的每一天的概念。如果您想要一致的输出,那么您将删除 startOf('day') 调用。

推荐

在您上次更新声明您预计 8 小时后,您似乎根本不想要 startOf('day') 中的时间。只需这样做:

moment(v).fromNow()

也不需要涉及 .zone()

关于javascript - 时区解析 inferno,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17552907/

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