我有一个格式化为isotime的日期对象。我正在使用|日期过滤器在我的模板中很好地格式化它,但它错误地改变了时间。
本守则......
<td>[[ user.last_online | date:'dd MMM yyyy - hh:mm a' ]]</td>
<td>[[ user.last_online ]]</td>
结果......
现在我知道1小时的差异是因为时区,这正是我所期待的。但是会议纪要不正确。
在第一行中,应用过滤器时会添加13分钟。 在第二行中,添加了5分钟。
这两个值不仅错误,而且也不一致。
答案 0 :(得分:4)
如果选中ISO8601,则可以看到正确的时间戳格式
yyyy-MM-ddTHH:mm:ss.SSSZ
毫秒应由3位数组成。我做了一个简单的测试,你可以在纠正毫秒部分后看到日期将正确呈现。
{{"2013-08-09T15:36:31.764546+02:00" | date:'dd MMM yyyy - hh:mm a'}}<br />
{{"2013-08-09T15:34:14.318753+02:00" | date:'dd MMM yyyy - hh:mm a'}}<br />
{{"2013-08-09T15:36:31.764+02:00" | date:'dd MMM yyyy - hh:mm a'}}<br />
{{"2013-08-09T15:34:14.318+02:00" | date:'dd MMM yyyy - hh:mm a'}}<br />
结果是
09 Aug 2013 - 09:49 AM
09 Aug 2013 - 09:39 AM
09 Aug 2013 - 09:36 AM
09 Aug 2013 - 09:34 AM
的 Demo 强>
<强>更新强>
Python的datetime.isoformat()
以微秒0 <= microsecond < 1000000
返回时间。 Angularjs不喜欢,虽然这种格式根据ISO8601是正确的,因为ISO8601只需要one or more digits representing a decimal fraction of a second
所以我猜你可以使用strftime
来格式化它。
答案 1 :(得分:2)
答案 2 :(得分:1)
您的日期格式正确。 ISO8601实际上不需要任何特定数量的小数。可能有零到7位小数或更多。如果您查看ISO8601规范的实际副本,则第4.2.2.4节说明如下:
...在十进制符号后面有必要的数字......
有一些较旧的浏览器在直接传递给new Date()
构造函数时很重要,但是AFAIK会考虑错误并修复它们。
您遇到了AngularJS中的错误,该错误已在1.1.5版中修复。您可以在change log中找到它,如下所示:
日期过滤器:正确格式化日期超过3个亚秒数字(4f2e3606)