Dies ist kein Moment.js-spezifisches Problem; Das gleiche passiert, wenn Sie versuchen, ein Date()
Objekt mit der Zeichenfolge zu initialisieren, die Sie auch verwenden. Wenn Sie es als Date()
Objekt erstellen erste und manuell das Jahr vergeben setYear()
verwenden, funktioniert aber es ein Datum von -700
akzeptieren:
var date = new Date();
date.setYear(-700);
moment(date).year();
> -700
jedoch als Niels Keurentjes has pointed out, dieses Datum Berechnungen erhalten weit zurück ziemlich kompliziert und kann nicht sein, überhaupt zuverlässig.
Wenn Sie „-700-01-01“ können Sie das Jahr konfigurieren, Monat und Tag separat:
date.setYear(-700);
date.setMonth(0);
date.setDate(1);
console.log(date);
> Fri Jan 01 -700 11:53:57 GMT+0000 (GMT Standard Time)
Zur Frage, ob der 1. Tag des 1. Monats in 700BC war eigentlich ein Freitag ... du wirst selbst nachsehen müssen.
Als allgemeine Regel sollten Sie dies sowieso nicht wollen. Datumsberechnungen vor langer Zeit werden unglaublich unordentlich und per Definition falsch sein, weil der Gregorianische Kalender damals einfach nicht standardisiert war. Kurz gesagt: Es gab nie einen "1. Januar" gemäß der Kalenderlogik von Moment.js, in 700 v. Chr. War der einzige Kalender, der sporadisch verwendet wurde, der [Kalender von Numa] (http://en.wikipedia.org/wiki/) Roman_calendar # Calendar_of_Numa), der jedes Jahr 355 Tage zählte. Der Gregorianische Kalender war bis 1752 nicht zuverlässig. –
Es gibt mehrere Gründe, dies zu tun - vielleicht muss der Benutzer einige Daten auf einer Timeline von "usuall" JavaScript-Tool, und damit diese Anfrage ist vollständig gültig. Niemand bezweifelt, dass Daten BC nicht zuverlässig sind, wenn es um den Tag der Woche oder so geht, aber dennoch muss es Weg geben, wie man es macht. Welt startete nicht am 1.1.1970 ... :) – Radek