TLDR: Вы не можете надежно преобразовать это значение только для даты, вместо этого отправьте строку ...
... или, по крайней мере, так должны начинаться почти все ответы.
Здесь возникает ряд проблем с конверсией.
Это дата без времени
Кажется, что все упускают из виду то, сколько в этом вопросе конечных нулей - оно почти наверняка началось как дата без времени:
/Date(1224043200000)/
При выполнении этого из консоли javascript в качестве новой даты (на основе многих ответов)
new Date(1224043200000)
Вы получаете:
Исходный запрос был, вероятно, в EST и имел чистую дату (sql) или DateTime (не DateTimeOffset) с полночью.
Другими словами, здесь подразумевается, что часть времени не имеет смысла. Однако, если браузер выполняет это в том же часовом поясе, что и сервер, который его сгенерировал, это не имеет значения, и большинство ответов работают.
Бит по часовому поясу
Но, если вы выполнили приведенный выше код на машине с другим часовым поясом (например, PST):
Вы заметите, что мы на день отстаем от в этом другом часовом поясе. Это не будет исправлено путем изменения сериализатора (который по-прежнему будет включать часовой пояс в формате ISO)
Проблема
Date (sql) и DateTime (.net) не имеют часового пояса, но как только вы конвертируете их во что-то, что делает (javascript выводит через json в этом случае), действие по умолчанию в .net предполагает текущий часовой пояс.
Число, которое создает сериализация, составляет миллисекунды с начала эпохи Unix или:
(DateTimeOffset.Parse("10/15/2008 00:00:00Z") - DateTimeOffset.Parse("1/1/1970 00:00:00Z")).TotalMilliseconds;
Это то, что новый Date () в javascript принимает в качестве параметра. Epoch от UTC, так что теперь у вас есть информация о часовом поясе, хотите вы этого или нет.
Возможные решения:
Возможно, безопаснее создать строковое свойство для вашего сериализованного объекта, который будет представлять ТОЛЬКО дату - строка с "15.10.2008" вряд ли кого-нибудь еще спутает с этим беспорядком. Хотя даже там вы должны быть осторожны при разборе:
https://stackoverflow.com/a/31732581
Однако, в духе предоставления ответа на заданный вопрос, как:
function adjustToLocalMidnight(serverMidnight){
var serverOffset=-240; //injected from model? <-- DateTimeOffset.Now.Offset.TotalMinutes
var localOffset=-(new Date()).getTimezoneOffset();
return new Date(date.getTime() + (serverOffset-localOffset) * 60 * 1000)
}
var localMidnightDate = adjustToLocalMidnight(new Date(parseInt(jsonDate.substr(6))));