Странный формат даты Справка - PullRequest
1 голос
/ 03 декабря 2010

Я создал метод расширения, который использует встроенный сериализатор ASP.NET для сериализации моих объектов в JSON для отправки обратно на мой сервер через AJAX следующим образом:

namespace ExtensionMethods.Json
{
public static class JsonHelper
{
    public static string ToJson(this object obj)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        return serializer.Serialize(obj);
    }

    public static string ToJson(this object obj, int recursionDepth)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        serializer.RecursionLimit = recursionDepth;
        return serializer.Serialize(obj);
    }
}
}

//usage
String json = myObject.ToJson();

Это отлично работает, за исключением дат, так как отправляет даты в следующем формате:

/Date(1291276800000)/

Есть ли способ исправить эту серверную сторону так, чтобы дата стала чем-то более управляемым, или нужно было бы выполнить какой-то глупый анализ символов на стороне клиента (то есть вычистить цифры из скобок и попытаться установить дату используя это число как миллисекунды)? Или есть лучший способ, которым я просто пропускаю? Я пробовал Date.parse([the date]), но он выдает ошибку "Неверный формат даты".

Ответы [ 4 ]

3 голосов
/ 03 декабря 2010

Это действительная дата Json.Посмотрите на этот другой вопрос, чтобы помочь вам получить эту дату обратно. Как мне отформатировать дату Microsoft JSON?

1 голос
/ 03 декабря 2010

Я использовал JavaScript Date Format расширение формата даты типа Date.Он хорошо работал с датами в формате JSON.

Я включаю файл .js и форматирую даты следующим образом:

function formatJsonDate(jsonDate, formatString) {
    var dt = new Date(+jsonDate.replace(/\/Date\((\d+)\)\//, '$1'));
    return dt.format(formatString);
}

var formattedDate = formatJsonDate(jsonDate, "mm/dd/yyyy");

Существуют даже некоторые предопределенные маски формата даты, такие как:

// Some common format strings
dateFormat.masks = {
    "default":      "ddd mmm dd yyyy HH:MM:ss",
    shortDate:      "m/d/yy",
    mediumDate:     "mmm d, yyyy",
    longDate:       "mmmm d, yyyy",
    fullDate:       "dddd, mmmm d, yyyy",
    shortTime:      "h:MM TT",
    mediumTime:     "h:MM:ss TT",
    longTime:       "h:MM:ss TT Z",
    isoDate:        "yyyy-mm-dd",
    isoTime:        "HH:MM:ss",
    isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
    isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};
0 голосов
/ 13 мая 2011

Для ответа на этот вопрос я использовал в основном:

function parseJsonDate (date, shortFormat) {
    if (date != null) {
        var d = new Date(parseInt(date.substr(6)));
            if (shortFormat) {
                return (d.getMonth() + 1) + '/' + d.getDate() + '/' +
                          d.getFullYear().toString().substr(2);
            }
            return d;
    } else {
            return null;
    }
}
0 голосов
/ 03 декабря 2010

У меня тоже была эта проблема, и я решил просто переместить все мои объекты дат в метки времени Unix и проанализировать их обратно.Это дополнительная работа, но она поддерживает смешное форматирование.Если у вас есть переменная класса с типом данных long, она должна довольно хорошо хранить временную метку.

Здесь есть несколько довольно твердых примеров.

http://www.epochconverter.com/

...