#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-х годов довольно отрывочны, так как не было ни одного базового значения для смещения.: -)