[javascript] JavaScript에서 Date 객체를 수신하기 위해 JSON을 구문 분석하는 방법은 무엇입니까?

다음과 같은 JSON 조각이 있습니다.

\/Date(1293034567877)\/

이 .NET 코드의 결과입니다.

var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();

이제 내가 직면 한 문제는 JavaScript에서 이것으로부터 Date 객체를 만드는 방법입니다. 내가 찾을 수있는 것은 놀라운 정규식 솔루션 (많은 버그가 포함되어 있음)뿐이었습니다.

이것이 JavaScrip에 모두 포함되어 있기 때문에 우아한 솔루션이 없다고 믿기 어렵습니다 .JavaScript 코드로 간주되는 JSON (JavaScript Object Notation)을 읽으려는 JavaScript 코드를 의미합니다. 여기서 잘 해.

또한 작업 할 수없는 평가 솔루션 (보안 위협으로 지적되는 것 외에)도 보았습니다.

정말 우아하게 할 방법이 없나요?

실제 대답이없는 비슷한 질문 :
GWT로 ASP.NET JSON 날짜 형식을 구문 분석하는 방법



답변

날짜에 대한 표준 JSON 표현은 없습니다. @jAndy가 제안한대로하고 a DateTime를 전혀 직렬화하지 않아야 합니다. RFC 1123 날짜 문자열 ToString("r")이나 Unix-epoch의 초 수 또는 JavaScript에서 Date.


답변

JSON.parse함수는 선택적 DateTime 리바이 버 함수를받습니다. 다음과 같은 기능을 사용할 수 있습니다.

dateTimeReviver = function (key, value) {
    var a;
    if (typeof value === 'string') {
        a = /\/Date\((\d*)\)\//.exec(value);
        if (a) {
            return new Date(+a[1]);
        }
    }
    return value;
}

그런 다음 전화

JSON.parse(somejsonstring, dateTimeReviver);

그리고 당신의 날짜가 올 것입니다.


답변

Roy Tinker의 답변은 다음과 같습니다.

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

그가 말했듯이 : substr 함수는 “/ Date (“부분을 취하고 parseInt 함수는 정수를 가져와 끝에 “) /”를 무시합니다. 결과 숫자는 Date 생성자에 전달됩니다.

또 다른 옵션은 JavaScript가 쉽게 읽을 수 있도록 ASP 측에서 정보의 형식을 적절하게 지정하는 것입니다. 날짜에 대해 다음을 고려하십시오.

DateTime.Now()

다음과 같은 형식을 반환해야합니다.

7/22/2008 12:11:04 PM

Date이것을 다음과 같은 JavaScript 생성자에 전달 하면 :

var date = new Date('7/22/2008 12:11:04 PM');

이제 변수 date는 다음 값을 보유합니다.

Tue Jul 22 2008 12:11:04 GMT-0700 (Pacific Daylight Time)

당연히이 DateTime객체를 JS Date생성자가 허용 하는 모든 종류의 문자열 / int로 형식화 할 수 있습니다 .


답변

JSON에서 JavaScript 스타일 ISO8601 날짜를 사용하는 경우 MDN 에서 사용할 수 있습니다.

var jsonDate = (new Date()).toJSON();
var backToDate = new Date(jsonDate);
console.log(jsonDate); //2015-10-26T07:46:36.611Z


답변

JSON 날짜를 JavaScript에서 일반 날짜 형식으로 변환 할 수 있습니다.

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


답변

문제 :

new Date(1293034567877);

이렇게하면 “Wed Dec 22 2010 16:16:07 GMT + 0000 (GMT Standard Time)”이 반환됩니다.

아니면 json에서 번호를 가져와야합니까?


답변

나는 이것이 매우 오래된 스레드라는 것을 알고 있지만, 나처럼 이것에 부딪 치는 사람들을 돕기 위해 이것을 게시하고 싶습니다.

타사 스크립트를 사용하는 데 신경 쓰지 않는다면 moment, js
를 사용할 수 있습니다. 그런 다음 .format ()을 사용하여 원하는대로 포맷 할 수 있습니다.