首页 > 解决方案 > moment().fromNow() 忽略 UTC

问题描述

我已经看到了有关此问题的多个问题,而这篇文章并没有为我澄清。

我必须增加对 UTC 功能的混淆表达。对 moment.utc() 最直观的期望是它会返回一个 Moment 对象,以 UTC 时间表示现在的日期/时间。但根据这个讨论,情况并非如此,它只是设置了标志。目前尚不清楚该标志的作用。文档中没有提到这些,这使得它严重不足。请在您的待办事项列表中添加对该主题的说明以及示例。谢谢你。

我从查询中获得 ISO 8601 时间,并希望根据数据网格中的用户配置显示不同的结果。

我从文档和stackoverflow都尝试了不同的方法,但似乎都没有给出预期的结果,即来自Now()的UTC时间,而是显示来自Now()的本地时间。在控制台中,值似乎正确,直到 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;
                    }  

标签: javascriptmomentjsutc

解决方案


推荐阅读