DatePipe在Safari浏览器中不起作用

时间:2019-10-30 06:11:43

标签: html angular

我已经使用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'.

2 个答案:

答案 0 :(得分:1)

错误来自您尝试从无效的字符串创建Date对象的事实。

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

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的名称,并允许您定义自己的语法。它可以使您的生活更轻松,并添加许多甜蜜的功能,但并不总是可能有额外的依赖关系。

时刻非常受欢迎,甚至还包含角(angular-moment)的包装

答案 1 :(得分:0)

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

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