【问题标题】:DatePipe is not working in safari browserDatePipe 在 Safari 浏览器中不起作用
【发布时间】:2019-10-30 14:26:02
【问题描述】:

我已将 DatePipe 用于日期格式,它工作正常,除了 safari 浏览器,它在 safari 中显示为空白并抛出......

InvalidPipeArgument:“无法将管道“e”的“2019-10-30 12:36:12”转换为日期。

 <div> 
      <h4 class="view_dark_txt" *ngIf="entrydate_text">{{entrydate_text | date: Dateformates}}</h4>
 </div> ```

Dateformates is a variable which have value = 'MMM d, y'.

【问题讨论】:

    标签: html angular


    【解决方案1】:

    错误来自您尝试从无效字符串创建日期对象。

    有些浏览器比其他浏览器更宽松,这就是为什么有这么多库来解决这个问题的原因。

    Firefox:
    new Date('2019-10-30 12:36:12')
    Date Wed Oct 30 2019 12:36:12 GMT+0700
    
    Safari:
    new Date('2019-10-30 12:36:12')
    Invalid Date = $2
    

    选项 1:更改日期合成器

    如果您控制数据的整个生命周期,一种选择是确保您的字符串匹配 the proper date format。

    日期时间字符串的标准字符串表示是 ISO 8601 日历日期扩展格式的简化(有关详细信息,请参阅 ECMAScript 规范中的日期时间字符串格式部分)。
    例如,"2011-10-10"(仅日期形式)、"2011-10-10T14:48:00"(日期时间形式)或"2011-10-10T14:48:00.000+09:00"(日期-时间形式,毫秒和时区)可以传递并被解析。

    最好的选择是使用new Date().toISOString(),这是所有浏览器都会使用的字符串化日期。

    选项 2:外部库

    另一种是使用像moment.js 这样的库,它提供了一个非常permissive parser 并让您定义自己的语法。它可以让您的生活更轻松,还可以添加许多甜蜜的功能,但并非总是可以实现额外的依赖。

    Moment 很受欢迎,甚至还有 Angular 的包 (angular-moment)

    【讨论】:

    • 我也尝试将 DB 日期转换为 ISO 格式日期 createdAt.replace(' ', 'T'); 它对我来说很好
    【解决方案2】:

    首先您必须在执行 PIPE 之前将其转换为 toDate(),因此您更新的代码:

    <div> 
        <h4 class="view_dark_txt" *ngIf="entrydate_text"> 
            {{entrydate_text.toDate() | date: Dateformates}}
        </h4>
    </div>
    

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 2018-06-01
      • 1970-01-01
      • 2021-10-18
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2019-08-31
      相关资源
      最近更新 更多