Формат даты JSON мм / дд / гггг - PullRequest
3 голосов
/ 23 ноября 2010

Вот что я получаю в качестве данных:

jsonp1290537545248 ([{"Active": true, "EndDate": "\ / Date (-62135578800000-0500) \ /", "StartDate": "\ / Date (1280635200000-0400) \ /"}]) ;

  $.getJSON(url, {},
      function (data) {
          alert(data[0].EndDate);
          alert(Date(data[0].StartDate));
          //alert(data[0].StartDate.getDate());// + "/" + (data[0].StartDate.getMonth() + 1) + "/" + data[0].StartDate.getFullYear()); // alerts: "15/10/2008" 
          //var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
          alert('dd    ' + new Date(parseInt(data.substr(6)))); 

      });

Как получить в формате ММ / ДД / ГГГГ?

Ответы [ 5 ]

5 голосов
/ 23 ноября 2010

Я бы использовал регулярное выражение, аналогичное тому, что написал Зейн, но не использовал eval(), например: ( demo ):

var start = parseInt(data.StartDate.replace(/\/Date\((.*?)[+-]\d+\)\//i,"$1"), 10),
    date = new Date( start ),
    fStart = date.getMonth()+1 + '/' + date.getDate() + '/' + date.getFullYear();

А что это за дата окончания? Это не похоже на разницу, и если вы используете это число в качестве новой даты, вы получите «Sun Dec 31 0000 22:59:59 GMT-0600 (Central Standard Time)» ... так что я не был уверен, что делать с этим значением.

4 голосов
/ 24 ноября 2010

Необходимо учитывать часовой пояс, чтобы определить, какая это дата.Я предполагаю, что первая часть даты - это вывод Date.getTime() из Java или JavaScript ( т.е. количество миллисекунд с 1 января 1970 года, 00:00:00 UTC).

Для правильного вывода всех значений даты необходимо применить смещение часового пояса ( например, -0500 для восточного стандартного времени) перед созданием объекта Date, а затем использовать методы UTC для получениячасти даты.Причина в том, что JavaScript не предоставляет метод Date.setTimezoneOffset() для установки часового пояса на правильный (невозможно изменить его из системного часового пояса посетителя).

Пример кода

Воткод, который я придумал.Он использует регулярное выражение для извлечения частей закодированной даты, применяет указанное смещение часового пояса, создает объект Date, а затем строит дату из частей (демонстрация: http://jsfiddle.net/Wa8LY/1/).

var dateParts = data[0].StartDate.match(/\((.*)([+-])(..)(..)\)/);
var dateObj = new Date(
    /* timestamp in milliseconds */ Number(dateParts[1]) +
    /* sign of timezone offset */ Number(dateParts[2] + '1') *
    /* hours and minutes offset */ (36e5 * dateParts[3] + 6e4 * dateParts[4])
);

var dateMMDDYYYY = [dateObj.getUTCMonth() + 1,
                    dateObj.getUTCDate(),
                    dateObj.getUTCFullYear()].join('/');

.компоненты

Если вам нужно добавить компоненты даты слева ( например 01/01/0001), вы можете использовать эту функцию, чтобы помочь сделать это:

function leftPadWithZeroes(str, len) {
    return (new Array(len + 1).join('0') + str).slice(-len);
}

И измените последние строки на (демо: http://jsfiddle.net/5tkpV/1/):

var dateMMDDYYYY = [leftPadWithZeroes(dateObj.getUTCMonth() + 1, 2),
                    leftPadWithZeroes(dateObj.getUTCDate(), 2),
                    leftPadWithZeroes(dateObj.getUTCFullYear(), 4)].join('/');
4 голосов
/ 23 ноября 2010

Это может помочь.См. Демонстрацию в http://jsfiddle.net/zainshaikh/pysAR/.

var date = eval(data[0].StartDate.replace(/\/Date\((.*?)\)\//gi, "new Date($1)"));

. Затем вы можете использовать сценарий JavaScript Date Format (1,2 КБ в минимизированном и сжатом виде), чтобы отобразить его так, как вам нужно.

Как отформатировать дату Microsoft JSON?

2 голосов
/ 27 декабря 2010

Автоматическое преобразование сериализованных дат JSON в фактические даты Javascript

Поскольку вы используете jQuery, вас может заинтересовать написанный мною код, который автоматически преобразует сериализованные даты в фактические даты Javascript.

Ваш код будет по-прежнему использовать $.parseJSON() на клиенте, но со вторым параметром, где вы указываете ему автоматически преобразовывать даты. Существующий код все еще будет работать, потому что расширенная функциональность только анализирует даты по вашему требованию.

Проверьте сообщение в блоге и узнайте сами. Он многоразовый и будет работать глобально, так что вы можете просто забыть об этом ручном преобразовании даты.

0 голосов
/ 04 февраля 2015

Следующее сработало, потому что моя строка даты была "/ Date (1334514600000) \"

'function ConvertJsonDateString(jsonDate) {  
   var shortDate = null;    
   if (jsonDate) {  
       var regex = /-?\d+/;  
       var matches = regex.exec(jsonDate);  
       var dt = new Date(parseInt(matches[0]));  
       var month = dt.getMonth() + 1;  
       var monthString = month > 9 ? month : '0' + month;  
       var day = dt.getDate();  
       var dayString = day > 9 ? day : '0' + day;  
       var year = dt.getFullYear();  
       shortDate = monthString + '/' + dayString + '/' + year;  
}  
return shortDate;  
};'
...