Форматирование даты JSON с помощью JavaScript - PullRequest
0 голосов
/ 08 июня 2011

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

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

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

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"?

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

Ответы [ 2 ]

1 голос
/ 09 июня 2011

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>
1 голос
/ 08 июня 2011

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

Здесь есть очень хорошая статья: Javascript / Json Date Parsing

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

...