2016-11-18 174 views
2

我有一個貓鼬架構與timestamp選項設置爲true。問題與貓鼬時間戳和時代轉換爲日期()

schema = new mongoose.Schema({ 
    ... 
}, 
{ timestamps: true }); 

現在我有一個Android應用程序,獲得使用System.currentTimeMillis()其中工程一切都很好,給我的毫秒數,因爲UNIX紀元時間的時間戳。

我將這些數據發送到我的Node.js/Express服務器,該服務器只需要時間並返回在該特定日期之後創建的文檔。

// get all docs 
router.get('/api/seekers', function(req, res) { 
    Seeker.find({createdAt:{ $gt: new Date(req.query.timestamp) }}, function(err, seekers) { 
     if(err) 
      res.send(err); 
     else 
      res.json(seekers); 
    }); 
}); 

所以我送https://api_url.com/api/seekers?timestamp=1479431351762作爲對服務器的請求。

現在一對夫婦的事情發生了:

  1. 我送以毫秒爲單位的值,並得到這個錯誤

    {"message":"Cast to date failed for value \"Invalid Date\" at path \"updatedAt\"","name":"CastError","kind":"date","value":null,"path":"updatedAt"}

    調查的一點點後,原來你需要將秒數傳遞給Date()。所以,

  2. 我將值除以1000得到秒(req.query.timestamp/1000)。現在我沒有收到錯誤,但查詢約束不起作用。我從開始的時候就掌握了所有的價值。

  3. 我搬了蒙戈外殼,檢查問題是否仍然存在,對此事實證明它因爲我可以在毫秒值傳遞給蒙戈的日期:

    > new Date(1479431351762) ISODate("2016-11-18T01:09:11.762Z")

    但是,如果我試圖穿過第二值Date(),事實證明它實際上是送我剛開始的時候:

    > new Date(1479431351) ISODate("1970-01-18T02:57:11.351Z")

我無法弄清楚,我能做些什麼服務器請求和貓鼬正確處理時間戳和查詢我的數據庫?

+1

有你試過鑄造查詢字符串來詮釋爲'Seeker.find({createdAt:{$ GT,新的日期(parseInt函數(req.query.timestamp))}},函數(呃,求職者){...}'? – chridam

+0

呃,呃,應該是我嘗試的第一件事,無論如何,謝謝! – doberoi96

回答

2

任何有相同問題的流浪者,可能錯過了chridam的評論,您只需在解析之前將傳遞的時間戳投射到int。這工作:

new Date(parseInt(req.query.timestamp))