如何从mongoDB获取日期并使用moment.js显示它?

问题描述:

我有一个表格,用户用以下格式输入日期:YYYY-MM-DD如何从mongoDB获取日期并使用moment.js显示它?

我在Mongo DB中存储日期。默认情况下,MongoDB将其存储为UTC日期。

例子: 用户输入2018年2月6日 蒙戈店:“星期二2018年2月6日00:00:00 GMT + 0000(UTC)”

可以说,我想显示此追溯到用户。

下面的代码给了我错了日期:

var eventDateString = $('#hiddenDate').val() // Just gets the date as stored in mongo 
var dateObj = new Date(eventDateString) 
var dateMom = moment(dateObj).format('dddd, MMMM DD YYYY'); 
console.log(dateMom) 

什么会打印为: “星期一,2018年2月5日” 这是不正确的日期应该是二月6

为什么这是否发生?

我试图这样做是为了解决这一问题:

var eventDateString = $('#hiddenDate').val(); 
$('#show-eventDate').text(moment.utc(eventDateString).format('dddd, MMMM DD YYYY')); 

我得到正确的结果: “星期二,2018年二月六日”

不过,我得到以下警告:

enter image description here

(弃用警告:提供的值不是以公认的ISO格式。 Date(),它在所有浏览器和版本中都不可靠。非ISO日期格式不鼓励,并将在即将发布的主要版本中删除。请参阅http://momentjs.com/guides/#/warnings/js-date/了解更多信息....)

如何解决此问题?

你是相当接近的解决方案,你必须使用moment.utc告诉那一刻,你的输入是UTC,并通过format参数,以避免弃用警告

代码示例:

var eventDateString = $('#hiddenDate').val(); 
 
var mom = moment.utc(eventDateString, 'ddd MMM DD YYYY HH:mm:ss ZZ'); 
 
$('#show-eventDate').text(mom.format('dddd, MMMM DD YYYY'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script> 
 

 
<input id="hiddenDate" type="hidden" value="Tue Feb 06 2018 00:00:00 GMT+0000 (UTC)"> 
 
<div id="show-eventDate"></div>

所以,我这样做是为了避免贬值的警告,和它的工作

var eventDateString = $('#hiddenDate').val(); 
var index = eventDateString.indexOf('00:00'); 
var shortDate = eventDateString.substr(0,index-1); 
$('#show-eventDate').text(moment(shortDate, 'ddd MMM DD YYYY').format('dddd, MMMM DD YYYY')); 

但我不喜欢这样,我硬编码'00想法:00' - 任何更好的解决方案,将不胜感激

这只是一个小编辑到VincenzoC的响应

,而不是时刻(EVENTDATE ....),正确的解决方案具有的时刻。 utc(.....)

var eventDateString = $('#hiddenDate').val(); 
var mom = moment.utc(eventDateString, 'ddd MMM DD YYYY HH:mm:ss ZZ'); 
$('#show-eventDate').text(mom.format('dddd, MMMM DD YYYY')); 
+0

我编辑了我的aswer修复代码片段nd我知道'moment.utc',因为我建议在我的答案的第一部分使用它(我只是忘记在片段中使用它)。我真的不承认为什么你标记为接受你的第一个答案,为什么你发布了这个新的答案,而不是评论我的或建议编辑它。 – VincenzoC

+0

对不起。我对此很陌生 – Asool