Как создать объект Date из строковой даты в Javascript для первых лет нашей эры? - PullRequest
3 голосов
/ 12 октября 2010


У меня есть следующая строка даты:

"Четверг 14 0002 01:01:00 GMT + 0200 (Стандартное время GTB)"

, и я пытаюсь преобразоватьэто к объекту Date:

date = new Date("Thu Nov 14 0002 01:01:00 GMT+0200 (GTB Standard Time)")  
=> Invalid Date {}

, и это не работает.И

date = new Date("Thu Nov 14 2 01:01:00 GMT+0200 (GTB Standard Time)")  
=> Invalid Date {}

тоже не работает

но

date = new Date("Thu Nov 14 2002 01:01:00 GMT+0200 (GTB Standard Time)")

работает

Кто-нибудь знает изящный способ разобрать его?

Ответы [ 2 ]

6 голосов
/ 12 октября 2010

Вы можете установить любую дату.включая минуты, часы и миллисекунды, использующие метки времени до 1970 года, являются отрицательными целыми числами.

alert(new Date(-62076675540000).toUTCString());

// >> Wed, 13 Nov 0002 23:01:00 GMT

Or you can set the date as a string by replacing the years to make it over 1000,
then subtracting the amount you added  with setFullYear()

var d=new Date("Thu Nov 14 1002 01:01:00 GMT+0200 (GTB Standard Time)")
d.setFullYear(d.getFullYear()-1000)
alert(d.toUTCString())

// >> Wed, 13 Nov 0002 23:01:00 GMT

You can automate a conversion to timestamps-

var s="Thu Nov 14 0002 01:01:00 GMT+0200 (GTB Standard Time)";
var y=s.split(' ')[3], y2=5000+(+y);
var d=new Date(s.replace(y,y2));
d.setFullYear(d.getFullYear()-5000)
var timestamp=+d;
alert(timestamp)
// >> -62076675540000
3 голосов
/ 12 октября 2010

Даты Javascript основаны на подсчете миллисекунд с 1 января 1970 года, 00: 00: 00.000 UTC.Даты до этого не определены.

Вам придется придумать свой собственный способ представления таких дат.

edit - хорошоСказав это, Javascript, похоже, готов представлять даты со странно большими отрицательными отклонениями эпохи;смещения, которые не вписываются в 32-битные целые числа.Я подозреваю, что основной причиной вашей даты является просто то, что формат в ней расстраивает парсер.После сокращения дня должна быть запятая.

Другая проблема (мальчик, это гораздо интереснее, чем я думал) состоит в том, что в Chrome и Firefox, по крайней мере, в любой год, прежде чем 100 рассматривается как сокращение в течение годав 20-м веке.

снова отредактируйте - согласно документам Mozilla, Дата может быть в диапазоне от -100 000 000 дней до эпохи до 100 000 000 дней после нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...