- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有这个 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/
我有这个 ISO 日期: var v = '2013-07-09T13:27:29.000Z'; 如果我这样做: var g = moment(v).format(); 控制台给我 g 值作为正确的本
我是一名优秀的程序员,十分优秀!