문제

다음과 같은 JSON 날짜를 표현:

"\/Date(1221644506800-0700)\/"

당신은 어떻게 직렬화 이것으로 그것의 자바스크립트 Date-type 형성하는가?

나는 시도를 사용하 MS AJAX JavaScrioptSerializer 다음과 같습니다:

Sys.Serialization.JavaScriptSerializer.deserialize("\/Date(1221644506800-0700)\/")

그러나 내가 다시 얻은 literal string 날짜입니다.

도움이 되었습니까?

해결책

제공하는 당신이 알고 있는 문자열은 확실히 날짜 선호 이렇게하려면:

 new Date(parseInt(value.replace("/Date(", "").replace(")/",""), 10))

다른 팁

랜드 라에 대한 일 ASP.NET 아틀라스/AJAX, 설명한 디자인의 JavaScriptSerializer DateTime 출력 고 밝혔 원산지의 신비한 선도하고 끄는 슬래시.그는 이 권장 사항:

실행에 대한 간단한 검색"\/Date((\d+))\/"대체로"new Date($1)"전에 평가 (그러나 후 유효성 검사)

내가 구현되는 것으로:

var serializedDateTime = "\/Date(1271389496563)\/";
document.writeln("Serialized: " + serializedDateTime + "<br />");

var toDateRe = new RegExp("^/Date\\((\\d+)\\)/$");
function toDate(s) {
    if (!s) {
        return null;
    }
    var constructor = s.replace(toDateRe, "new Date($1)");
    if (constructor == s) {
        throw 'Invalid serialized DateTime value: "' + s + '"';
    }
    return eval(constructor);
}

document.writeln("Deserialized: " + toDate(serializedDateTime) + "<br />");

이것은 매우 가깝습의 많은 다른 답변:

  • 사용하는 고정 RegEx 로 Sjoerd Visscher 았다--을 잊지 마세요^습니다.
  • 피 문자열입니다.대체하고,'g'또는'나'옵션에 RegEx."/Date(1271389496563)//Date(1271389496563)/"안됩니다.

JSON 값을 문자열,수,목,배열,true,false 또는 null 입니다.그래서 이 문자열입니다.이 없 공식적인 방법을 나타내는 날짜에 JSON.이 구문에서 asp.net ajax 를 구현합니다.다른 사람을 사용하여 ISO8601 형식입니다.

구문을 분석할 수 있습는 이를 다음과 같이 설명합니다:

var s = "\/Date(1221644506800-0700)\/";
var m = s.match(/^\/Date\((\d+)([-+]\d\d)(\d\d)\)\/$/);
var date = null;
if (m)
  date = new Date(1*m[1] + 3600000*m[2] + 60000*m[3]);

정규 표현식에 사용되는 ASP.net AJAX 직렬화 방법을 확인하는 문자열을 보이는 좋아요"/Date(1234)/"(문자열 자체가 실제적으로 포함되어야 합 지수 및 슬래쉬가).을 얻 이러한 문자열은,당신은 탈출하는 데 필요 견적과 백슬래시 문자,그래서 javascript 코드를 만들 문자열은 다음과 같"\"\/Date(1234)\/\"".

이 작동합니다.

Sys.Serialization.JavaScriptSerializer.deserialize("\"\\/Date(1221644506800)\\/\"")

그녀의 이름은,그러나 내가 나를 직렬화하고 날짜를 직렬화 문자열을 반환에서는,다음 deserialize 클라이언트 측에서 한다.

은 이렇습니다.

Script.Serialization.JavaScriptSerializer jss = new Script.Serialization.JavaScriptSerializer();
string script = string.Format("alert(Sys.Serialization.JavaScriptSerializer.deserialize({0}));", jss.Serialize(jss.Serialize(DateTime.Now)));
Page.ClientScript.RegisterStartupScript(this.GetType(), "ClientScript", script, true);

는 사람들을 위해 사용하고 싶지 않은 Ajax,단순히 추가 시제품 기능을 string 클래스가 있습니다.

E.g.

    String.prototype.dateFromJSON = function () {
    return eval(this.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
};

를 사용하고 싶지 않 eval?Try 가

var date = new Date(parseInt(jsonDate.substr(6)));

주석으로,생각하는 데 사용되는 Microsoft 오해의 소지가 있었을 사용하여 이 형식입니다.그러나,JSON 사양은 매우 명확하지 않을 때 그것을 정의하는 방법을 설명하는 날짜에 JSON.

실제로,momentjs 지원의 이런 종류의 형식으로,당신이 할 수 있는 다음과 같습니다.

    var momentValue = moment(value);

    momentValue.toDate();

이 값을 반환합에 자바스크립트 date 형식

큰 숫자가 표준 JS 시간

new Date(1221644506800)

수 Sep17 2008 19:41:46GMT+1000(EST)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top