2016-09-23 70 views
0

我想轉換一個JSON字符串日期(在谷歌Apps腳本)爲JavaScript日期對象,然後檢查是否該日期是另一個日期之後,但我不能讓它工作。轉換JSON字符串日期爲JavaScript(谷歌Apps腳本)

我嘗試使用建議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" 
}] 

更新:在這個問題

JSON進行了更新,準確地反映了我在我的電腦上,因此問題不是JSON格式。我主要有興趣將JSON字符串日期轉換爲JavaScript日期。請注意,由於這是Google Apps腳本,導入庫(即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

編輯:既然JSON似乎是語法正確的,我只能評論爲什麼它打印1969-12-31。

EDIT2:根據代碼片斷你最近提供的; (它有許多語法錯誤!),您正在比較flightDate string到afterDate Date。您應該先從flightDate創建一個Date對象,然後進行相應的比較。

當您使用無效值調用Date構造函數時;大多數時候它會打印1970-01-01這是一個時代。

你可能落後UTC時區,所以你是1969-12-31。

+0

是的,我輸入它,而不是複製和粘貼,因爲我不得不改變很多值。當你回覆時,我正在編輯帖子(這裏的人很快:-),但現在顯示爲我在我的機器上運行的內容。您對打印輸出的解釋是有幫助的。謝謝。 – fragilewindows

+1

「*日期構造函數具有無效值;大部分時間將打印出1970-01-01 ... *」[*語言規範*]不支持該語句(http://ecma-international.org/ ECMA-262/7.0/index.html中#仲丁基date.parse)。如果字符串看起來符合標準支持的ISO 8601的有限子集且一個或多個值無效(例如2016-09-43),則結果應該是無效的日期(即具有NaN時間值的日期) 。但是,它也可能被視爲不是ISO 8601,在這種情況下,結果取決於實施。 – RobG