如何从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年二月六日”
不过,我得到以下警告:
(弃用警告:提供的值不是以公认的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'));
我编辑了我的aswer修复代码片段nd我知道'moment.utc',因为我建议在我的答案的第一部分使用它(我只是忘记在片段中使用它)。我真的不承认为什么你标记为接受你的第一个答案,为什么你发布了这个新的答案,而不是评论我的或建议编辑它。 – VincenzoC
对不起。我对此很陌生 – Asool