JSON вообще не имеет дат (это один из недостатков JSON). Эти строки - просто строки.
Некоторые структуры, такие как ASP.Net, используют этот синтаксис для указания дат. В каком часовом поясе они будут продиктованы рамками. Я считаю, что даты указаны в UTC, и поэтому вы можете просто использовать конструктор new Date(Number)
для их создания (подробнее в этот другой ответ ). Это создает дату путем непосредственной установки ее внутреннего значения в «миллисекундах с начала эпохи UTC», подробнее в разделе 15.9 спецификации. Имейте в виду, что это работает только в том случае, если фактически все, что создает эти псевдо-даты, использует UTC.
Обновление : Глядя на ваш код, хотя он работает, эта строка:
var TheDate = eval(DateString.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
... является злоупотреблением eval
. eval
следует по возможности избегать. Вместо этого, если вы хотите сохранить его как однострочник:
var TheDate = new Date(Number(DateString.replace(/\/Date\((\d+)\)\//gi, "$1")));
... или несколько более наглядно:
var Match = /\/Date\((\d+)\)\//gi.exec(DateString);
var TheDate;
if (Match) {
TheDate = new Date(Number(Match[1]));
}
Во всех этих случаях Date
будет инициализирован значением времени UTC, встроенным в строку даты. Но затем, когда вы попросите JavaScript отформатировать дату (например, через toString
), он будет использовать ваш местный часовой пояс для этого. Вы не показали, как вы выводите дату, поэтому я не могу сказать вам, почему часовой пояс, кажется, не изменится, если вы измените свой часовой пояс (возможно, браузер не принял изменение?). Когда я делаю это, если я вывожу дату в виде строки, она показывает ее по британскому летнему времени (которое является моим текущим часовым поясом), если я использую toString
, или UTC, если я использую toUTCString
. Вот живой пример , в котором используется как исходная дата, так и дата (сегодняшняя дата, как я ее пишу), которая относится к летнему времени, поэтому даже в Великобритании вы можете увидеть разницу между UTC и местным временем.
Не по теме : В JavaScript преобладающим соглашением является использование имен в формате camelCase, начинающихся со строчной буквы как для локальных переменных, так и для имен функций. Итак, theDate
, а не TheDate
. Начальные заглавные буквы зарезервированы для функций конструктора (например, Date
). Конечно, вы можете игнорировать это соглашение, но другим будет трудно прочитать ваш код.