Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用moment.js从mongoDB获取日期并显示它?_Javascript_Mongodb_Date_Momentjs_Utc - Fatal编程技术网

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

Javascript 如何使用moment.js从mongoDB获取日期并显示它?,javascript,mongodb,date,momentjs,utc,Javascript,Mongodb,Date,Momentjs,Utc,我有一个表单,其中用户以以下格式输入日期:YYYY-MM-DD 我将日期存储在Mongo DB中。默认情况下,Mongo DB将其存储为UTC日期 例如: 用户输入2018-02-06 Mongo门店:“2018年2月6日星期二00:00:00 GMT+0000(UTC)” 假设我想向用户显示此日期 以下代码给了我错误的日期: var eventDateString = $('#hiddenDate').val() // Just gets the date as stored in mongo

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

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

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

为什么会这样

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

var eventDateString = $('#hiddenDate').val();
$('#show-eventDate').text(moment.utc(eventDateString).format('dddd, MMMM DD YYYY'));
我得到了正确的结果:“2018年2月6日,星期二”

但是,我得到以下警告:

(弃用警告:提供的值不是公认的ISO格式。即时构造返回到js Date(),这在所有浏览器和版本中都不可靠。不鼓励使用非ISO日期格式,并将在即将发布的主要版本中删除。有关更多信息,请参阅…)


我该如何避开这个问题呢?

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

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”的想法——如果有更好的解决方案,我们将不胜感激。

如果您非常接近解决方案,您必须使用它来告知您的输入是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'))

这只是对VincenzoC回答的一个小修改

正确的解决方案不是矩(eventDate…),而是矩.utc(…)


这对我来说非常有效

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

我已经编辑了我的aswer to fix代码段,我知道
moment.utc
,因为我在回答的第一部分建议使用它(我只是忘记在代码段中使用它)。我真的不明白为什么你标记为接受你的第一个答案,为什么你发布这个新答案而不是评论我的答案或建议对其进行编辑。对不起。我是新来的,你能解释一下为什么这样做,为什么这是一个好的选择吗?
moment(req.body.foo , "ddd MMM DD YYYY HH:mm:ss ZZ").format("DD/MM/YYYY");