2016-09-23 3 views
0

JSON 문자열 날짜 (Google Apps Script에서)를 JavaScript 날짜 개체로 변환하고 해당 날짜가 다른 날짜 이후인지 확인하려고하지만 그 날짜를 확인할 수 없습니다. 그것을 작동 시키십시오.JSON 문자열 날짜를 JavaScript (Google Apps Script)로 변환

나는 here 제안을 사용해 보았습니다. 하지만 내 출력이 올바르지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 당신의 도움을 주셔서 감사합니다.


코드 조각 :

var json = JSON.parse(resp); 

var flightDate = new Date(json[i].flightDate) 

for (i = 0; i < json.length; i++ { 

flightDate = json[i].flightDate 
traveler = json[i].traveler 
flight = json[i].flight 
destination = json[i].destination 

var afterDate = new Date('1997-07-30') 

if (flightDate >= afterDate) { 
    output.push ([flightDate, traveler, flight, destination]) 
    } 
} 

출력 :

1969-12-31 

JSON :

[{"flightDate": "2013-03-01", 
"traveler": "Paul Carter", 
"flight": "JetBlue", 
"destination": "Australia" 
}, 
{"flightDate": "1997-02-18", 
"traveler": "Paul Carter", 
"flight": "American Airlines", 
"destination": "Australia" 
}, 
{"flightDate": "2004-05-25", 
"traveler": "Paul Carter", 
"flight": "JetBlue", 
"destination": "Chile" 
}, 
{"flightDate": "1995-08-05", 
"traveler": "Paul Carter", 
"flight": "United", 
"destination": "Ireland" 
}] 
,691,363 (210)

업데이트 :이 질문에

JSON이 정확하게 문제는 JSON 형식되지 않도록 내 컴퓨터에있는 것을 반영하기 위해 업데이트되었습니다. 저는 주로 JSON 문자열 날짜를 JavaScript 날짜로 변환하는 것에 관심이 있습니다. Google Apps Script에 있으므로 라이브러리 (예 : Moment.js) 가져 오기가 불가능합니다.

+0

귀하의 json은 배열처럼 보입니다. json.flightDate를 사용할 수없는 경우 색인을 먼저 지정해야합니다. json [1] .flightDate – StackOverMySoul

+0

죄송합니다. 실제로 스크립트에서 반복 작업을 수행합니다. 질문을하는 것을 잊어 버렸습니다. 지금 편집 중입니다. 감사. – fragilewindows

+0

왜 당신이 잘못 생각하고 있다고 생각합니까? 완벽하게 잘 보이고 예상대로 작동합니다. 당신의'flightDate'는'afterDate'보다 작습니다. if 절에없는 유일한 이유입니다. –

답변

1

우선, json 사본 인 경우 ,이 누락되어 구문 분석이 작동하지 않습니다.

json을 수정 한 후 배열 필터를 사용하여 특정 날짜 이후 항공편을 가져올 수 있습니다.

var data = [{ 
 
    flightDate: "2013-03-01", 
 
    traveler: "Paul Carter", 
 
    flight: "JetBlue", 
 
    destination: "Australia" 
 
}, { 
 
    flightDate: "1997-02-18", 
 
    traveler: "Paul Carter", 
 
    flight: "American Airlines", 
 
    destination: "Australia" 
 
}, { 
 
    flightDate: "2004-05-25", 
 
    traveler: "Paul Carter", 
 
    flight: "JetBlue", 
 
    destination: "Chile" 
 
}, { 
 
    flightDate: "1995-08-05", 
 
    traveler: "Paul Carter", 
 
    flight: "United", 
 
    destination: "Ireland" 
 
}]; 
 

 
var afterDate = new Date("2000-01-01"); 
 
var flightsAfter = data.filter(function(flight) { 
 
    return new Date(flight.flightDate) >= afterDate; 
 
}); 
 

 
console.log(flightsAfter);

0

편집 :이 1969년 12월 31일를 인쇄 않은 이유를 이제 JSON 구문이 올바른 것 같다, 난 단지 댓글을 달 수 있습니다.

EDIT2 : 최근에 제공 한 코드 스 니펫에 따르면, (구문 오류가 많습니다!) flightDate string을 afterDate Date과 비교합니다. 먼저 flightDate에서 Date 객체를 만든 다음 그에 따라 비교해야합니다.

잘못된 값으로 Date 생성자를 호출 할 때; 대부분의 경우 1970 년 1 월 1 일을 인쇄합니다.

아마도 UTC 시간대보다 늦을 수 있으므로 1969-12-31이었습니다.

+0

그래, 나는 값을 많이 바꾸어야했기 때문에 복사하고 붙여 넣기하는 대신 타이핑했다. 내가 대답 할 때 게시물을 편집하는 중이었습니다 (여기에있는 사람들은 빠릅니다 :-)하지만 지금은 내 컴퓨터에서 실행중인 것으로 표시됩니다. 시간 인쇄물에 대한 설명이 도움이됩니다. 감사. – fragilewindows

+1

"유효하지 않은 값을 가진 날짜 생성자, 대부분 1970-01-01 ... *"이 문은 [* 언어 사양 *] (http://ecma-international.org/)에서 지원하지 않습니다. ecma-262/7.0/index.html # sec-date.parse). 문자열이 표준에서 지원하는 ISO 8601의 제한된 하위 집합을 따르는 것으로 보이며 하나 이상의 값이 유효하지 않은 경우 (예 : 2016-09-43) 결과는 잘못된 날짜 여야합니다 (즉 시간 값이 NaN 인 경우) . 그러나 ISO 8601이 아닌 것으로 간주 될 수도 있습니다.이 경우 결과는 구현에 따라 다릅니다. – RobG

관련 문제