Форматирование даты в формате JSON с помощью javascript

#javascript #jquery #json #datetime #date-format

#javascript #jquery #json #дата-время #формат даты

Вопрос:

Я возвращаю объект JSON из моего метода веб-сервиса. В объекте есть несколько дат, и поэтому сгенерированный JSON выглядит следующим образом:

 {"d": [
    {"PeriodID":8,"Period":"072011","BeginDate":"/Date(1294268400000)/"},
    {"PeriodID":2,"Period":"052011","BeginDate":"/Date(1293836400000)/"}
]}
  

Я пытаюсь преобразовать эти данные в строку, которая будет добавлена в качестве <option> элементов в HTML select. Это мой код:

 var rtypes = data.d;
$.each(rtypes, function (key, value) {
    var text = value.Period   " - "   "from "   eval(value.BeginDate.slice(1, -1));
    var option = $("<option></option>").attr("value", value.PeriodID).text(text);
    $('#rpCombo').append(option);
});
  

Теперь вопросы:

  1. Могу ли я отформатировать дату, содержащуюся в Period поле (например, 072011), как «Июль 2011»?
  2. Как я могу преобразовать результат eval(value.BeginDate.slice(1, -1)) , который, например, является чем-то вроде «Ср. 14 июля ……», во что-то вроде «14/07/2011»?

Спасибо за помощь

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

1. Не используйте eval. Вместо этого используйте Date.parse…

2. Не могли бы вы, пожалуйста, опубликовать пример? Спасибо

Ответ №1:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse

Например

 // create 1 of June 2011 from Jun 2011
var period = new Date(Date.parse("1 " period)); 
  

Вот что, я думаю, вы хотите

 <script>

var months = ["Jan","Feb","Mar","Apr","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
var result = {"d": [
    {"PeriodID":8,"Period":"072011","BeginDate":1294268400000},
    {"PeriodID":2,"Period":"052011","BeginDate":1293836400000}
]}


var aPeriod, period, periodMM, periodYYYY, periodText, beginDate, beginMM, beginDD;
for (var i=0,n=result.d.length;i<n;i  ) {
  aPeriod = result.d[i];

//  period = new Date(aPeriod.Period.slice(2),aPeriod.Period.slice(0,2)-1,1,0,0,0);
//  periodText = months[period.getMonth()] " " period.getFullYear();
  periodMM = parseInt(aPeriod.Period.slice(0,2),10);
  periodYYYY = aPeriod.Period.slice(2);
  periodText = months[periodMM] " " periodYYYY;
  beginDate = new Date(aPeriod.BeginDate);      
  beginDD = beginDate.getDate();
  if (beginDD<10) beginDD="0" beginDD;
  beginMM = beginDate.getMonth() 1;
  if (beginMM<10) beginMM="0" beginMM;
  periodText  = " " beginDD "/" beginMM "/" beginDate.getFullYear();
  alert(periodText)     
}

</script>
  

Ответ №2:

Не уверен в масштабах вашего проекта, но в последнее время я много работал с датами и извлек выгоду, внедрив расширения javascript в объект даты javascript. Это сделает вашу жизнь ооочень намного проще, как и для меня, и позаботится о вышеупомянутом сценарии, а затем и о некоторых других.

Здесь есть очень хорошая статья: Синтаксический анализ даты в формате Javascript / Json

Мне действительно нужно было немного ее подправить, но с момента внедрения этого подхода я не оглядывался назад.