Значение DateTime.MinValue преобразуется в 0001-01-01 08:05:43 в Javascript

#javascript #c# #datetime

Вопрос:

Серверная часть написана на C# и возвращает список массивов объектов в формате json. В объектной модели есть одно поле, это тип даты и времени, и его значение равно DateTime.MinValue .

Находясь на стороне страницы, он получает /Date(-62135596800000)/ в виде строки. Я предполагаю, что это связано с тем, что объект сериализуется. И в javascirpt я пытаюсь преобразовать его обратно в тип даты.

 var timeSpan = element.DateModify.replace('Date','').replace('(','').replace(')','').replace(///g,'');
console.log(timeSpan);
var d = new Date(parseInt(timeSpan));
console.log(d);
 

При преобразовании в дату в javascript его значение равно 0001-01-01 08:05:43 , нет 0001-01-01 00:00:00 . Почему это так?

Ответ №1:

DateTime.MinValue 0001-01-01 00:00:00 UTC. И это действительно 0001-01-01 08:05:43 в вашем местном часовом поясе (что бы это ни было, вероятно Asia/Shanghai , или где-то рядом с этим). Когда вы console.log a Date , он отображает дату в вашем местном часовом поясе. Date Значение правильное. Он просто отображается в другом формате.

Дополнительные 5 минут и 43 секунды связаны с тем, что в 1 году нашей эры часовые пояса не были стандартизированы, а среднее местное время, отклоненное от UTC в вашем местоположении, составляет 08:05:43.

Два простых способа заставить его отображать время UTC 00:00:00-это позвонить toISOString или toUTCString :

 console.log(new Date(-62135596800000).toISOString());
console.log(new Date(-62135596800000).toUTCString()); 

Комментарии:

1. Смещения до конца 1800-х годов довольно отрывочны, так как не было ни одного базового значения для смещения.: -)