【问题标题】:moment timezone now add one hour to local time时刻时区现在增加一小时到本地时间
【发布时间】:2021-01-08 09:48:49
【问题描述】:

当我尝试用当地时间格式化日期时遇到问题(以前没有):

   var dateStartFormat = "2021-1-8 08:00"
   var romeStart = moment.tz(dateStartFormat, "Europe/Rome");
   var romeStartFormat = romeStart.format();

romeStartFormat 应该给我:2021-01-08T08:00:00+01:00 相反,他增加了一个小时并给了我:2021-01-08T**09:00:**00+01:00

我没有更改代码中的任何内容,直到几天前它才起作用。

【问题讨论】:

    标签: javascript momentjs moment-timezone


    【解决方案1】:

    “几天前”您可能还在 12 月底,所以时间戳应该类似于 "2020-12-28 08:00"。现在在一月份你会得到一个像"2021-1-8 08:00"这样的时间戳,这对于momentjs来说不是一个有效的输入格式。 Momentjs 期望 RFC2822 或 ISO 格式作为输入,因此日和月都必须以两位数给出(因此如果

    考虑到这一点,这个 sn-p 应该返回预期的结果。

    let 
      date1 = "2021-01-08 08:00",
      date2 = "2021-1-8 08:00"
      
    //use a proper formated timestamp  
    let 
      start1 = moment.tz(date1, "Europe/Vienna"),
      format1 = start1.format();
    
    //provide a format specifier
    let 
      start2 = moment.tz(date2, "yyyy-M-D HH:mm", "Europe/Vienna"),
      format2 = start2.format();
    
    console.log(format1);
    console.log(format2);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.32/moment-timezone-with-data.min.js"></script>

    【讨论】:

    • 完美,现在我解决了。即使我离开罗马而不是维也纳,它仍然有效。
    【解决方案2】:

    您应该将格式添加到momnet.tz()

    var dateStartFormat = "2021-1-8 08:00"
    var romeStart = moment.tz(dateStartFormat, "YYYY-M-D HH:mm" , "Europe/Rome");
    var romeStartFormat = romeStart.format();
    

    【讨论】:

    • mmmm 所以我更正了时间,它可以工作,但是我弄错了日期......他不接受它
    • 如果你从另一个人那里复制你的答案,你至少应该正确地做。首先,日期和月份的格式说明符分别是DM(而不是dm)。此外,您的订单错误。您的格式将导致 8 月 1 日而不是 1 月 8 日。
    猜你喜欢
    • 2015-12-09
    • 2019-09-11
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2018-08-21
    • 2017-04-23
    • 2021-03-09
    相关资源
    最近更新 更多