2016-06-26 173 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

相关问题