我已经使用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'.
答案 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
如果您控制数据的整个生命周期,一种选择是确保字符串与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()
,这是所有浏览器将日期字符串化的方式。
另一种方法是使用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>