2016-06-26 116 views
0

我遇到問題,其中提交的日期字段是帶時間戳的返回日期,而不是時間戳記設置爲00:00:00的日期。此代碼適用於其他實例,我試圖實現此過程,但出於某種原因,它不起作用,我很好奇,如果轉換必須在我的視圖中發生,或者應該發生在我的後端路線。帶時間戳記MomentJS返回日期

路線:

.post(function(req, res){ 


     models.Creator.findAll({ 
      order: 'createDate DESC', 
      where: { 
       dataDateStart: { 
        $gte: moment(req.body.startDate).utc().format("YYYY-MM-DD") 
       }, 
       dataDateEnd: { 
        $lte: moment(req.body.endDate).utc().format("YYYY-MM-DD") 
       } 
      }, 
      include: [{ 
       model: models.User, 
       where: { 
        organizationId: req.user.organizationId, 
       }, 
       attributes: ['organizationId', 'userId'] 
      }], 
      limit: 10 
     }).then(function() { 
      res.redirect('/app'); 
     }).catch(function(error){ 
      res.send(error); 
     }) 
    }); 

輸出where子句:

WHERE `creator`.`data_date_start` >= '2016-06-07 04:00:00' AND `creator`.`data_date_end` <= '2016-06-11 04:00:00' ORDER BY createDate DESC LIMIT 10; 

正如你所看到的問題是,04:00:00出現,而不是00:00:00

查看:

<div class="row"> 
    <div class="creator-search-form col-md-6 col-md-offset-3"> 
     <h1 id="search-header">Filter Feed</h1> 
     <form action="/app" method="post" class="creator-filter-fields"> 
      <p>Date Range:</p> 
      <input type="date" name="startDate"> 
      <input type="date" name="endDate"> 
      <button type="submit" id="creator-filter-submit">Submit</button> 
     </form> 
    </div> 
</div> 

回答

1

我期望你的情況發生在Moment下游的某個地方,沒有時間的日期被解釋爲本地時間,然後轉換爲UTC。我猜你的服務器設置爲UTC-4(美國東部夏令時?),這就是爲什麼你看到你做什麼。

當您使用.format('YYYY-MM-DD')只是.format(),你得到的線包括所有的時間部分和偏移量發生變化,如下所示:

moment.utc('2016-01-01').format() 
"2016-01-01T00:00:00Z" 

由於上述日期是完全明確的,你的一切正在改變在你的堆棧中的時間不會做出任何關於如何解釋它的奇怪的決定,並且一切正常。

0

提供從日期元素的查詢值的格式爲YYYY-MM-DD字符串,那麼你可以通過

moment.utc(value).format("YYYY-MM-DD") 

其中值是日期字符串得到的結果。

我希望這會有所幫助。

+0

感謝您的評論,但您的解決方案提供了完全相同的輸出,我已經得到。仍然沒有生成日期字符串 – cphill

+0

這不應該是這種情況。您可以在瀏覽器的控制檯窗口中嘗試它(假設存在moment.js庫)。 moment.utc('2015-01-01 00:00:00')。格式(「YYYY-MM-DD」)== >>>「2015-01-01」。問題可能在其他地方。請console.log req.body.startDate和req.body.endDate。 – zubair1024

+0

你說得對,我加了'console.log('Unformatted:'+ req.body.startDate); \t \t console.log('Formatted:'+ moment.utc(req.body.startDate).format(「YYYY-MM-DD」));'並接收'未格式化:2016-06-13 格式化:2016 -06-13'。這似乎表明它可能是Sequelize,我的ORM是追加'04:00:00'。你會同意嗎? – cphill

相關問題