Datetime AngularJS日期筛选器时间不正确

Datetime AngularJS日期筛选器时间不正确,datetime,angularjs,timezone,Datetime,Angularjs,Timezone,我有一个格式化为isotime的日期对象。我使用|日期过滤器在我的模板中很好地格式化它,但它错误地更改了时间 此代码 <td>[[ user.last_online | date:'dd MMM yyyy - hh:mm a' ]]</td> <td>[[ user.last_online ]]</td> [[user.last|u online |日期:'dd-MMM-yyyy-hh:mm-a'] [[user.last_onl

我有一个格式化为isotime的日期对象。我使用|日期过滤器在我的模板中很好地格式化它,但它错误地更改了时间

此代码

    <td>[[ user.last_online | date:'dd MMM yyyy - hh:mm a' ]]</td>
    <td>[[ user.last_online ]]</td>
[[user.last|u online |日期:'dd-MMM-yyyy-hh:mm-a']
[[user.last_online]]
结果在这个

现在我知道1小时的差异是因为时区的不同,这是我所期待的。然而,会议记录是不正确的

在第一行中,应用筛选器时会添加13分钟。 在第二行中,添加了5分钟


这两个值不仅错误,而且不一致。

我认为
user.last\u online
的值不正确或格式不正确。如果选中,您可以看到正确的时间戳格式为:

yyyy-MM-ddTHH:mm:ss.SSSZ

如果您检查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 />

更新


Python的
datetime.isoformat()
以微秒返回时间
0您的日期格式正确。ISO8601实际上并不需要任何特定数量的小数。可以是0到7个小数或更多。如果您查看ISO8601规范的实际副本,第4.2.2.4节说明如下:

。。。小数点后有尽可能多的数字

<> P>有一些旧的浏览器在直接传递到<代码>新的数据()/Cuth>构造函数时很重要,但是那些被认为是错误的并且是固定的。 您在AngularJS中遇到了一个bug,该bug已在1.1.5版中修复。您可以在他们的文档中找到它,如下所示:

日期筛选器:正确设置超过3个亚秒数字的日期格式()


我无法重现这个问题。看见
user.last\u online
的javascript值(
console.log
)是多少?你能粘贴你的isotime吗?第二列是last\u online的精确值,是python的datetime模块返回的isoformat()结果。这看起来确实是问题所在。但是,我正在使用pythons datetime.isoformat()获取该格式,它将返回您在第2列中看到的格式。看起来我必须格式化该方法的结果,以减少以毫秒为单位的额外数字。@sza-ISO8601中的小数数是可变的。这只是一个角度上的错误。看看我的答案。@MattJohnson谢谢!希望他们能尽快解决这个问题。但同时,这应该是另一种选择。我将把这个标记为解决方案,因为它确实解决了问题。然而,正如@MattJohnson在他的回答中指出的,真正的问题是我使用的angular版本中的一个bug。ISO8601中的小数数是可变的。这只是一个角度上的错误。看看我的答案。
09 Aug 2013 - 09:49 AM
09 Aug 2013 - 09:39 AM
09 Aug 2013 - 09:36 AM
09 Aug 2013 - 09:34 AM