如何解决moment().fromNow() 忽略 UTC
我已经看到多个关于此的问题,this post 没有为我澄清。
我必须补充一下对 UTC 功能的混淆。对 moment.utc() 最直观的期望是它会返回一个 Moment 对象,以 UTC 时间表示现在的日期/时间。但是根据这个讨论,情况并非如此,它只是设置了标志。目前尚不清楚该标志的作用。文档中没有提到这些,这使得它严重不足。请在您的待办事项中添加对此主题的说明和示例。谢谢。
我从查询中获得 ISO 8601 时间,并希望根据数据网格中的用户配置显示不同的结果。
我从文档和 stackoverflow 中尝试了不同的方法,但似乎都没有给出预期的结果,即 UTC 时间 fromNow(),而是显示本地时间 fromNow()。在控制台中,值似乎正确直到 moment.fromNow()
// Changes value on item["StartTime"] based on user config before it pushed.
else {
let time = item["StartTime"] // Outputs ISO 8601
console.log(time) // Output 2021-02-16T12:40:56.790Z
switch (true) {
// This case is the problem
case (userConfig.general.dateFormat == "From now" &&
userConfig.general.useLocal == false):
var utcDate = new Date(time).toUTCString();
// output Tue,16 Feb 2021 12:40:56 GMT
utcDate = moment.utc(utcDate).fromNow();
// output In an hour
// Im in UTC+1
item["StartTime"] = utcDate
break;
case (userConfig.general.dateFormat == "From now" &&
userConfig.general.useLocal == true):
time = new Date(time) // Outputs date
object defaults to browser timezone
time = moment(time).locale(navigator.language).fromNow()
time = time.toLocaleString(navigator.language)
item["StartTime"] = time
break;
case (userConfig.general.dateFormat == "Timestamp" && userConfig.general.useLocal == true):
time = new Date(time) // Outputs date object defaults to browser timezone
time = time.toLocaleString(navigator.language)
item["StartTime"] = time
break;
case (userConfig.general.dateFormat == "Timestamp" && userConfig.general.useLocal == false):
let date = moment(time);
let dateComponent = date.utc().format('YYYY-MM-DD');
let timeComponent = date.utc().format('HH:mm:ss');
item["StartTime"] = dateComponent + " " + timeComponent
break;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。