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

时间:2017-02-24 16:43:52

标签: javascript mongodb date momentjs utc

我有一个表单,用户以下列格式输入日期:YYYY-MM-DD

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

实施例: 用户输入2018-02-06 Mongo商店:“Tue Feb 06 2018 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日星期一” 这是不正确的,日期应该是2月6日。

为什么会这样?

我尝试通过这样做来解决问题:

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

我得到了正确的结果:“2018年2月6日星期二”

但是,我收到以下警告:

enter image description here

(弃用警告:提供的值不是公认的ISO格式。时刻构造回落到js Date(),这在所有浏览器和版本中都不可靠。不鼓励非ISO日期格式,将被删除在即将发布的主要版本中。有关详细信息,请参阅http://momentjs.com/guides/#/warnings/js-date/ ....)

如何解决此问题?

4 个答案:

答案 0 :(得分:1)

您非常接近解决方案,您必须使用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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

所以我这样做是为了避免折旧警告,并且它起作用了

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&#39; - 任何更好的解决方案将不胜感激

答案 2 :(得分:0)

这只是对VincenzoC的回应的一个小编辑

而不是时刻(eventDate ....),正确的解决方案有moment.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'));

答案 3 :(得分:0)

这对我来说很完美

moment(req.body.foo , "ddd MMM DD YYYY HH:mm:ss ZZ").format("DD/MM/YYYY");