2010-02-27 7 views
3

jQuery를 사용하여 JSON 피드에서 데이터를 가져 오는 중이며 피드의 일부로 '2009-07-01 07:30:09'와 같은 'datetime'속성이 표시됩니다. 이 정보를 자바 스크립트 Date 객체에 넣어서 사용하기 쉽도록하고 싶지만 Date 객체가 단순히 생성자에 플러그 인하면이 종류의 형식을 인식하지 못한다고 생각합니다. 이 형식을 Date 객체가 인식하고 사용할 수있는 것으로 빠르게 분해 할 수있는 기능이나 영리한 트릭이 있습니까?이 datetime 형식에 대한 간단한 변환이 있습니까?

+0

실제로 자바 스크립트 코드로 날짜를 조작해야합니까? 당신이하지 않으면 당신은 그냥 그대로 문자열을 떠날 생각할 수 있습니다. –

+0

그래, Date 개체가 구문 분석을 시도하더라도 인식하지 못하는 형식 인 것 같습니다. 속성의 실제 이름이 'datetime'이고 Google 및 VB 참조가 많이 나오는 인터넷 검색을 감안할 때 VB 또는 .NET에서 생성 된 일종의 타임 스탬프라고 추측합니다. –

+0

그리고 네, 있습니다. 그 시간부터 1 년 전에 JSON 피드에 대한 요청 시간을 비교해야합니다.내가 수동으로 문자열을 구문 분석 할 수 있다는 것을 알았지 만, 미리 만들고 더 간단한 솔루션을 기대하고있었습니다. –

답변

3

"날짜"당신이 속성 해당 웹 서비스에서 검색하는 것은 실제로는 Date이 아닙니다. 인식 된 날짜 형식이 아니기 때문입니다.

Date 객체는 "T"와 빈 공간을 대체하는 것 같이 그것을 처리하는 가장 쉬운 방법 :이 시간대를 처리하지 않는 한,

var receivedDate = "2009-07-01 07:30:09"; 
var serializedDate = new Date(receivedDate.replace(" ", "T")); 
alert(serializedDate); 

이 가장 정확한 아니라에서 대부분의 경우 작동합니다.

+0

나는 이것을 시도했지만 어떤 이유로 그것은 작동하지 않을 것이다. 공간은 공간을 유지합니다. –

+0

신경 쓰지 마세요, 작동합니다. replace()가 호출 된 문자열에 영향을 미쳤지 만 대체 결과를 반환하지 않는다는 가정하에있었습니다. 어떤 언어가 그 일을 할 수 있는지/모르는지는 모르겠지만, 어떤 언어가 있다는 것을 알고 있습니다. –

3

thisthis을 참조하십시오.

input = "2009-07-01 07:30:09"; 
var res = input.match(/([\d\-]+) (\d+):(\d+):(\d+)/); 
date = new Date(Date.parse(res[1])); 
date.setHours(res[2]); 
date.setMinutes(res[3]); 
date.setSeconds(res[4]); 
console.log(date); 

편집 : 내 원래의 대답이었다 크롬에서 오류가 발생하지만 모두 같은 잘못 날짜를 구문 분석하지 않았다

t = new Date(Date.parse("2009-07-01 07:30:09")); 

. 이것은 나를 버렸다. Date.parse는 실제로 꽤 색다른 것으로 보이며 완전한 날짜와 시간을 파싱하는 것은 아마도 그리 신뢰할 만하지 않습니다.

Edit2 : DateJS은 심각한 텍스트 구문 분석이 필요하지만 25 kb에서 일반용으로 사용하기에는 약간의 문제가있을 때 좋은 해결책으로 보입니다.

+0

@anshul> 그게 효과가 있습니까? – bdl

+0

Firefox에서 테스트 한 결과 "잘못된 날짜"가 표시됩니다. –

+0

Nope. 시도 중 ... $ ('# date') .html (t.getMonth() + '/'+ t.getDay()); NaN/NaN –

0

이것은 다소 번거롭지 만 JavaScript Date 객체는 YYYY, MM, DD, HH, MM, SS의 인수 목록을 사용합니다. 날짜 값을 파싱하여 Date 생성자에 전달합니다.

var splitDT= '2009-07-01 07:30:09'.split(' '); // ['2009-07-01','07:30:09'] 
var d= splitDT[0].split('-'); 
var t= splitDT[1].split(':'); 
alert((new Date(d[0],d[1],d[2],t[0],t[1],t[2])));  

바. 대신 배열 인덱스 값을 사용해야했습니다. 그래, 엉망이야. 그러나 그것은 효과적이다.

0

var str = "2009-07-01 07:30:09";

시간대에 따라 달라지며 날짜 문자열이 해당 월의 1을 뺀 경우.

은 GMT 시간이며, 07은 7 월과 8 월하지 의미하는 경우 :

var에 STR = "2009-07-01 7시 30분 9초"을;

var d=new Date(), time; 
str=str.split(/\D0?/); 
str[1]-=1; 
time=str.splice(3); 
d.setUTCFullYear.apply(d,str); 
d.setUTCHours.apply(d,time) 
alert(d) 

/* 반환 값 : (일) 수요일 2009년 7월 1일 그리니치 표준시 03시 30분 9초-0400 (동부 서머 타임) 또는 로컬 equivilent */

관련 문제