2014-09-15 2 views
5

ISO 날짜를 Moment.js로 포맷하는 방법은 무엇입니까?BC 날짜 형식을 지정하는 방법 (예 : "-700-01-01")?

moment("-700-01-01").year();  // 700 (WRONG) 
moment("-0700-01-01").year(); // 700 (WRONG) 
moment("-000700-01-01").year(); // -700 (RIGHT) 

어떤 이유로 6 자리 숫자 표기법이 작동합니다. 그것이 "올바른"길입니까? "-700-01-01"과 같은 표기법이 왜 작동하지 않습니까?

+3

일반적으로 어쨌든 이것을 원하지 않아야합니다. 오래 전에 계산 된 날짜 계산은 그레고리력 자체가 그 당시에는 표준화되지 않았기 때문에 엄청나게 엉망이었고 정의 상 잘못되었습니다. 요컨대, Moment.js의 달력 논리에 따르면 '1 월 1 일'은 없었습니다. 700BC에서 산발적으로 사용되는 유일한 달력은 [Numa 달력]이었습니다 (http://en.wikipedia.org/wiki/). Roman_calendar # Calendar_of_Numa) 매년 355 일을 계산했습니다. 그레고리력은 1752 년까지 원격으로 안정적이었습니다. –

+1

실제로 이것을하는 데에는 몇 가지 이유가 있습니다. 즉, 사용자가 "usuall"자바 스크립트 도구로 만든 타임 라인에 일부 데이터를 표시해야하므로이 요청이 완전하게 유효합니다. BC 주 날짜가 신뢰할 수 없다는 의심을하는 사람은 아무도 없습니다. 그렇지만 요일이나 그 날은 여전히 ​​어떻게해야하는지에 대한 필요성이 있습니다. 세상은 1.1.1970에 시작하지 않았다 ... :) – Radek

답변

3

Moment.js와 관련된 문제는 아닙니다. 사용중인 문자열로 Date() 객체를 초기화하려고 시도하는 경우에도 마찬가지입니다. 처음과 수동 Date() 객체로 만들 setYear()를 사용하여 연중 할당하는 경우는 -700의 날짜 동의 않습니다, 날짜 계산이 거슬러 매우 복잡 Niels Keurentjes has pointed out 그러나

var date = new Date(); 

date.setYear(-700); 

moment(date).year(); 
> -700 

을하고하지 않을 수 있습니다 전혀 신뢰할 수있는.

당신이 원하는 경우 "-700-01-01"당신은 년, 월, 별도로 하루 구성 할 수 있습니다 700BC에서 1 월 1 일이 실제로 여부에 관해서는

date.setYear(-700); 
date.setMonth(0); 
date.setDate(1); 

console.log(date); 
> Fri Jan 01 -700 11:53:57 GMT+0000 (GMT Standard Time) 

을 금요일에 ... 너 자신을 봐야 해.

+1

고마워,'new Date (-700, 0, 1)'로 날짜를 만드는 것은 실제로 잘 작동하지만 serializable 표기법이 필요하고 ISO 날짜가 완벽하다. Moment.js와 기본 Date 파서를 실제로 비교할 수는 없지만 moment.js는 Date 기능의 수퍼 세트를 제공하고 브라우저 간의 비 호환성을 해결합니다. 그래서 저는 이것이 순간이라고 말하고 싶습니다. 순간적으로 해결할 수있는 구체적인 문제 .js. 왜 6 자리 연도가 효과가 있는지에 대한 단서가 있습니까? –

0

예에서 마이너스 기호는 연도, 월 및 일 사이의 구분 기호로 사용됩니다. 제임스의 대답에 대한 언급에서 지적했듯이, 구분자로 혼수 상태를 사용하는 것은 구별하는 데 도움이됩니다.

관련 문제