2016-11-19 64 views
1

流星服務器代碼更新了MongoDB的收集比較日期,dateField已值看起來像這樣
ISODate("2016-11-19T00:00:00Z")MongoDB中

客戶端選擇一個dateStartdateFinish,像這樣
$(「輸入[名稱=」因此,我轉換用戶條目,以便我可以使用它來獲取dateField與下面的mongodb查詢匹配的文檔;

dateToISO: (date) => { // date format in YYYY-MM-DD 
    const dArr = date.split('-'); 
    return new Date(parseInt(dArr[0]), parseInt(dArr[1]) - 1, parseInt(dArr[2])); 
} 

然後將結果呈現給用戶使用的甲DD日期/ MM/YYYY

 let start = utility.dateToISO(dict.get('inquiryStartDate')); 
     let end = utility.dateToISO(dict.get('inquiryEndDate')); 

////Both of the above prints: Sat Nov 19 2016 00:00:00 GMT+1100 (AEDT) 

    return myCol.find({ 
     date: { 
      $gte: start, 
      $lte: end 
     } 
     }, { 
     transform: function(doc) { 
      doc.date = moment(doc.date).format('DD/MM/YYYY'); 
      return doc; 
     } 
     }); 

的代碼失敗,雖然存在某些返回任何文件事件。任何想法爲什麼以及如何解決它?

+0

您在代碼中評論說'上述兩種打印方式:2016年11月19日00:00:00 GMT + 1100(AEDT)',這樣只有文檔的日期字段的值纔是確切的'Sat Nov 19 2016 00: 00:00 GMT + 1100(AEDT)'將返回。 – Khang

+0

當你從查詢中刪除$ lte:end時它會起作用嗎? – Veeram

+0

@Khang爲了進行壓縮,將一個日期轉換爲另一個日期的最佳方法是什麼?現在確定這是否是問題,因爲如果日期值更改,相同的代碼工作正常。 –

回答

0

新日期(年,月,日)變體將具有當前系統時區中的日期。

比較沒有返回任何結果的原因是,當您在本地系統區域中傳遞日期時,流星執行從本地日期時間到UTC日期時間的轉換,因爲Mongo DB日期時間處於UTC時間。因此,您的輸入日期從2016年11月19日00:00 00:00 GMT + 1100(AEDT)變更爲2016年11月18日01:00:00 UTC。

考慮用戶輸入日期爲UTC。你只需要明確解析日期爲UTC。

嘗試

new Date(Date.UTC(2016, 11, 19, 0, 0, 0, 0) 

,並把它傳遞給查詢。