Ruby에서 JSON을 통해 Javascript로 날짜를 전달하고 있습니다.Javascript에서 JSON 날짜의 형식을 지정하는 방법은 무엇입니까?
자바 스크립트에는 "2010-03-24T10 : 00 : 00Z"로 제공됩니다.
이제 Javascript에서 어떻게 그 서식을 지정할 수 있습니까?
Ruby에서 JSON을 통해 Javascript로 날짜를 전달하고 있습니다.Javascript에서 JSON 날짜의 형식을 지정하는 방법은 무엇입니까?
자바 스크립트에는 "2010-03-24T10 : 00 : 00Z"로 제공됩니다.
이제 Javascript에서 어떻게 그 서식을 지정할 수 있습니까?
은 내가 먼저 날짜 객체를 생성하기 위해 다음과 같이 좀 그것을 할 거라고 생각 :
function dp(dateStr) {
var pattern = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/;
var match = pattern.exec(dateStr);
if (!match) {throw new Error('::Error, #dp could not parse dateStr '+dateStr);}
// we're safe to use the fields
return new Date(match[1], match[2]-1, match[3], match[4], match[5], match[6]);
}
console.log(dp('2010-03-24T10:00:00Z'));
는 그럼 난 다른 방식으로 그것을 꽤 - 인쇄 할 수 있습니다. 일치하는 배열 (idx 2 인 필드)의 날짜 (예 : 날짜 필드)가 0 인 색인으로 인해 어떻게 처리되어야하는지 확인하십시오.
(-1) 정규식으로 날짜를 파싱하는 것은 일반적으로 좋지 않습니다. 모든 변형을 설명하기가 어렵습니다. 일반적으로 문제를 본격적으로 다루는 API에 맡기는 것이 가장 좋습니다. 더 나은 대안을 위해 @Crescent가 게시 한 의견을 참조하십시오. – harschware
Eh? 아주 잘 알려진 형식의 꽤 잘 정의 된 작업이었습니다. 'Date.parse' 함수는 신뢰할 수 없습니다. 표준에 "2010-02-23T23 : 04 : 48Z"와 같은 문자열을 사용해야한다고하는 내용은 없습니다. 그래서 우리는 정규식을가집니다. 물론 더 많은 검사가 필요했기 때문에 (검색된 각 필드의 경계를 확인하십시오.) – npup
+1 @harschware 날짜 표현은 표준화 된 형식 (RFC822, RFC3339, ..)에도 높은 수준의 변동성이 포함되어 있으며 대개 날짜를 나타내는 데 사용되는 사양이 동반되지 않으므로 완전히 손상되지 않습니다. 표준화 된 파서를 쓸 수 없기 때문에 기본적으로 다양한 형식을 시도하고 있습니다. 문제의 형식은'ISO 8601'입니다. 표준화되어 있으며 정규식으로 파싱하는 데 문제가 없습니다. 정규 표현식은 악조건이 아닙니다. – Anurag
EcmaScript 5 사양에 따르면 JSON 날짜는 ISO 문자열로 인코딩되어야합니다.
function f(n) {
// Format integers to have at least two digits.
return n < 10 ? '0' + n : n;
}
Date.prototype.toJSON = function (key) {
return isFinite(this.valueOf()) ?
this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z' : null;
};
다행히도 루비 날짜 같은 방법으로 인코딩하는 것 :이 같은 자바 스크립트 날짜 개체의 toJSON
이 볼 수있는 방법입니다.
myData = JSON.parse(text, function (key, value) {
var a;
if (typeof value === 'string') {
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
}
}
return value;
});
이 모든 표준을 준수 JSON 구현과 작동합니다 : 우아한 해결책은 날짜 객체로 ISO 날짜 문자열을 변환하는 JSON 구문 분석 기능에 자극성 기능을 제공하는 것입니다.
두 샘플 모두 Douglas Crockford의 json2 소스 코드에서 가져온 것입니다.
날짜가 아닌 타임 스탬프로 전달하고 1000을 곱하면 어떨까요?
new Date(ruby_val * 1000);
나는 이것이 훨씬 더 합리적이라고 생각한다. Unix 타임 스탬프를 출력하기 위해 Rails 모델에서'as_json'을 재정의하고 클라이언트 측에서는 유닉스 타임 스탬프에서 날짜 객체를 생성하면됩니다. –
는 http://stackoverflow.com/questions/2479714/does-javascript-ecmascript3-support-iso8601-date-parsing –
감사를 참조하십시오,하지만 작동, 또는 무엇을합니까 거기에 아무것도 찾지 못하는거야 I 필요. 작동하는 것처럼 보이는 것은 '또 다른 예쁜 날짜 자바 스크립트'이지만 '내가 2 일 전'과 같은 정보를 반환하기 때문에 원하는 정보가 아닙니다. – 99miles
형식을 지정할 수 있기 전에 먼저 구문 분석을 수행하십시오. –