【问题标题】:Why formatting date in angular formatted or moment formatted reduce on day from date with time T00:00:00.000Z为什么以角度格式或矩格式格式化日期从日期开始随着时间 T00:00:00.000Z 减少
【发布时间】:2020-07-12 07:05:45
【问题描述】:

我有应用程序从数据库返回日期,格式如下 (2020-07-12T00:00:00.000Z) 当我通过 Angular 管道格式化日期或格式化它时,它会从日期减少一天,

例如,当我格式化 (2020-07-12T00:00:00.000Z) 日期以仅获取它更改为 (2020-07-11) 的日期时 任何解决方案如何在不减少日期的情况下获得日期。

     moment(2020-07-12T00:00:00.000Z).format('YYYY-MM-DD');

【问题讨论】:

  • 因为在您的当地时间,它前一天。
  • 解决办法是什么?
  • 丑陋的解决方案,假设来自 db 的那些日期值是实际字符串而不是日期对象,如果我理解正确你只关心一天,你可以像这样分割字符串:moment(date.slice(0, -14)).format('YYYY-MM-DD')
  • 我也有同样的问题。你需要设置时区,你会得到准确的日期。
  • 嗨@nir Shabi 你的解决方案很棒,如果你把它作为答案发布我会接受它,因为它帮助解决了我的问题

标签: angular momentjs


【解决方案1】:

丑陋的解决方案,假设来自 db 的那些日期值是实际的字符串而不是日期对象,如果我理解正确你只关心一天,你可以像这样分割字符串:

moment(date.slice(0, -14)).format('YYYY-MM-DD')

【讨论】:

    【解决方案2】:

    如果您像在您的示例中那样传递它,那么 Moment 将保留 UTC 偏移量(Z = Zulu 时间 = UTC+0)

    您的本地时区似乎有一个负的 UTC 偏移量,例如UTC-1 在您的示例中,这意味着您的时区日期实际上是祖鲁时间的前一天。

    您可以通过从您的时刻对象打印 ISO 8601 日期字符串来确认这一点:

    moment('2020-07-12T00:00:00.000Z').toISOString();
    // -> "2020-07-12T00:00:00.000Z"
    
    moment('2020-07-12T00:00:00.000Z').toISOString(true);
    // -> local time e.g. "2020-07-12T03:00:00.000+03:00"
    // if your UTC offset is +3
    
    moment('2020-07-12T00:00:00.000Z').toISOString(true);
    // -> local time e.g. "2020-07-11T23:00:00.000-01:00"
    // if your UTC offset is -1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2017-04-12
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      相关资源
      最近更新 更多