2013-08-09 2 views
2

isotime으로 포맷 된 날짜 개체가 있습니다. 내 서식 파일에서 멋지게 서식을 지정하려면 날짜 필터를 사용하고 있지만 시간은 잘못 변경됩니다.AngularJS 날짜 필터가 잘못된 시간

이 코드 ...이에서

<td>[[ user.last_online | date:'dd MMM yyyy - hh:mm a' ]]</td> 
    <td>[[ user.last_online ]]</td> 

결과는 ...

이제

enter image description here

나는 1 시간 차이 때문에 시간대의 것을 알고, 이것은 내가 '무엇인가 기대하고있어. 그러나 분은 정확하지 않습니다.

첫 번째 행에서 필터를 적용하면 13 분이 추가됩니다. 두 번째 행에 5 분이 추가됩니다.

이 두 값이 잘못되었을뿐만 아니라 불일치합니다.

+0

내가 문제를 재현 할 수없는 제대로 형식으로 날짜를. See this simple Fiddle] (http://jsfiddle.net/Blackhole/srnug/). 'user.last_online'의 javascript 값 ('console.log')은 무엇입니까? – Blackhole

+0

아이소티를 붙일 수 있습니까? – EpokK

+0

두 번째 열은 last_online의 정확한 값이며 파이썬의 datetime 모듈에 의해 반환 된 isoformat() 결과입니다. – Andre

답변

4

, 당신은 정확한 시간 스탬프 형식은

yyyy-MM-ddTHH:mm:ss.SSSZ 
입니다 볼 수 있습니다 : 당신이 ISO8601을 선택하면, 당신은 정확한 시간 스탬프 형식은 볼 수 있습니다

밀리 초는 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

업데이트

파이썬의 datetime.isoformat() 반환 마이크로와 시간입니다. Angularjs는 ISO8601에 따라이 형식이 올바르지 만 ISO8601 만 필요하므로 one or more digits representing a decimal fraction of a second

그래서 strftime을 사용하여 형식을 지정할 수 있습니다.

+0

이것은 실제로 그것이 문제인 것처럼 보입니다. 그러나 나는 pythons datetime.isoformat()을 사용하여 그 형식을 얻었고 두 번째 열에서 보는 것처럼 그것을 반환합니다. – Andre

+0

은 그 메서드에서 결과의 서식을 지정하여 밀리 초 안에 여분의 숫자를 삭제해야하는 것처럼 보입니다. – Andre

+0

@sza - ISO8601의 소수점은 가변적입니다. Angular의 버그 일뿐입니다. 내 대답을 보라. –

2

user.last_online의 값이 잘못되었거나 형식이 잘못되었다고 생각합니다. 당신은 ISO8601을 선택하면

yyyy-MM-ddTHH:mm:ss.SSSZ 

My plunker

+0

ISO8601의 소수점은 가변적입니다. Angular의 버그 일뿐입니다. 내 대답을 보라. –

1

날짜가 올바른 형식입니다. ISO8601은 실제로 특정 소수점 이하 자릿수를 요구하지 않습니다. 0에서 7 자리까지 또는 그 이상이있을 수 있습니다. ISO8601 사양의 실제 사본을 보면 4.2.2.4 절에서 다음과 같이 말합니다 :

... 십진 기호 뒤에 필요한만큼의 숫자가있는 ...

new Date() 생성자에 직접 전달 될 때 중요한 이전 브라우저가 있지만 AFAIK는 버그를 고려하여 수정되었습니다.

버전 1.1.5에서 수정 된 AngularJS의 버그가 있습니다. 당신은 다음과 같이 자신의 change log에서 참조 찾을 수 있습니다

날짜 필터 : 3 개 이상의 하위 두 번째 숫자 (4f2e3606)

+0

고맙습니다. 내 각도를 업데이트하고 도움이되는지 확인하겠습니다. – Andre

관련 문제