#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);
});
Теперь вопросы:
- Могу ли я отформатировать дату, содержащуюся в
Period
поле (например, 072011), как «Июль 2011»? - Как я могу преобразовать результат
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
Мне действительно нужно было немного ее подправить, но с момента внедрения этого подхода я не оглядывался назад.