繁体   English   中英

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

[英]How to get date from mongoDB and display it, using moment.js?

我有一个表单,用户按以下格式输入日期: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)

打印出来的是:“Monday, February 05 2018” 这是不正确的,日期应该是 2 月 6 日。

为什么会这样?

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

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

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

但是,我收到以下警告:

在此处输入图片说明

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

我该如何解决这个问题?

您非常接近解决方案,您必须使用moment.utc来告诉 moment 您的输入是 UTC 并传递format参数以避免Deprecation Warning

代码示例:

 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 回应的一个小编辑

而不是 moment(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'));

这对我来说非常有效

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM