Я вызываю свою базу данных, которая содержит тип данных datetime. Дата выглядит следующим образом:
2005-05-23 16: 06: 00.000
Я хотел бы отобразить это в таблице, когда пользователь выбирает определенный элемент из списка. Я вызываю свое действие контроллера и возвращаю Json всех времен и помещаю их в таблицу. Проблема в том, что дата совершенно неверна. Отображается следующее:
/Дата (1255470180000)/
Дата, которая возвращается, даже не разборчива (что я не хочу делать в любом случае), поэтому я даже не могу получить данные, если захочу. Любые идеи?
Я закончил форматирование кода в действии контроллера.
Я просто передал свойство datetime в строку с использованием .ToString() и получил желаемые результаты.
Спасибо за помощь, хотя ребята.
Дата, когда вы возвращаетесь, сериализуется маркером и несколькими миллисекундами с полуночи 1 января 1970 года (в UTC). Если вы изолируете числовую часть, преобразуете ее в число и подаете в конструктор Date
, вы получите фактическую дату для работы, которую вы можете форматировать по своему усмотрению.
var ticks, dt;
// Isolate the numeric portion of the value
ticks = /[0-9]+/.exec(json.dateValue)[0];
// Convert to a number
ticks = parseInt(ticks);
// Convert to a date
dt = new Date(ticks);
В качестве альтернативы, если JSON-сериализатор на сервере поддерживает параметр "replacer", как это делают Crockford и ECMAScript 5th edition, вы можете предоставить замену, отформатировав дату на строковой серверной стороне и обработать ее там, поскольку вы сказали, что не хотите анализировать дату на стороне клиента (хотя тег jQuery предложил мне, может быть, и так).
Другой альтернативой является возвращение форматированной строки из действия контроллера. Вы даже можете оставить временную метку и вернуть второе поле как "Отформатированная отметка времени" или что-то подобное.
var listFromDb = ...
return new Json(listFromDb.Select(itemFromDb => new List { new
{ Date = itemFromDb.Date, FormattedDate = FormatDate(itemFromDb.Date), ...}