【问题标题】:Angular date pipe takes into account timezone角度日期管道考虑到时区
【发布时间】:2020-08-12 19:14:04
【问题描述】:

我正在使用日期管道来显示我从 Web 服务 API 获得的时间。日期以yyyy-MM-ddThh:mm:ss.000Z 的形式出现,例如2020-08-12T07:06:07.000Z

但是,当我使用角度日期管道{{ arr.time | date:'mediumTime' }} 时,显示的时间比给定时间多三个小时,例如这里显示的时间是10:06:07。我怀疑这是因为浏览器考虑了我的时区 GMT+3。如何在不考虑时区的情况下显示准确时间?

【问题讨论】:

    标签: angular date-pipe


    【解决方案1】:

    可能有两种情况:

    1. 您获得的日期值是 UTC
    2. UTC 以外

    如果是 UTC,最后一个字符必须包含“Z”。 因此,对于非 UTC,我们可以在将其传递给管道之前添加“Z”

    这将始终打印收到的任何日期值

    {{arr.time?.charAt(arr.time?.length - 1) === 'Z' ? (arr.time | date:'mediumTime':'UTC') : (arr.time?.concat('Z') | date:'mediumTime':'UTC')}}
    

    【讨论】:

    • 哦,我明白了,所以我收到2020-08-12T07:06:07.000Z 的日期末尾已经有一个'z',所以它把时间作为UTC,并增加3 小时到显示值。那么如何让它显示原始值呢?
    • 试试上面提到的代码,它会打印出你收到的确切时间值
    【解决方案2】:

    尝试在管道中添加时区,

    例如以分钟为单位指定...对于 GMT+3,时区:'180'

    {{ arr.time | date:'mediumTime' : '180'}}
    

    【讨论】:

    • 哦,它实际上变得更糟了,现在又增加了一个小时,显示11:06:07 AM,而不是7:06:07 AM,时区:'180'。
    • 相应地减去/添加适当的分钟数。我想你现在有一个想法
    【解决方案3】:

    时区可以在角度日期管道中明确提及。

    {{ value_expression | date [ : format [ : timezone [ : locale ] ] ] }}
    

    或者您可以以分钟为单位指定,例如 GMT-2,时区:'-120'

    {{ yourDate | date: 'mediumTime' : '-120'}}
    

    或者请参考这个答案,它可以帮助你:-

    How can I deal with the timezone issue with the Angular 4 date pipe?

    【讨论】:

      猜你喜欢
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多