如何使用 moment.js 从 mongoDB 获取日期并显示它?
How to get date from mongoDB and display it, using moment.js?
我有一个表单,用户可以按以下格式输入日期:YYYY-MM-DD
我将日期存储在 Mongo 数据库中。默认情况下,Mongo 数据库将其存储为 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'));
我得到正确的结果:"Tuesday, February 06 2018"
但是,我收到以下警告:
(弃用警告:提供的值不是公认的 ISO 格式。moment 构造回退到 js Date(),这在所有浏览器和版本中都不可靠。不鼓励使用非 ISO 日期格式并将在即将发布的主要版本中删除。请参阅 http://momentjs.com/guides/#/warnings/js-date/ 了解更多信息....)
如何解决这个问题?
所以我这样做是为了避免折旧警告,而且它奏效了
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”进行硬编码的想法 -- 如果有更好的解决方案,我们将不胜感激
您非常接近解决方案,您必须使用 moment.utc
to tell moment that your input is UTC and pass 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>
这只是对 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");
我有一个表单,用户可以按以下格式输入日期:YYYY-MM-DD
我将日期存储在 Mongo 数据库中。默认情况下,Mongo 数据库将其存储为 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'));
我得到正确的结果:"Tuesday, February 06 2018"
但是,我收到以下警告:
(弃用警告:提供的值不是公认的 ISO 格式。moment 构造回退到 js Date(),这在所有浏览器和版本中都不可靠。不鼓励使用非 ISO 日期格式并将在即将发布的主要版本中删除。请参阅 http://momentjs.com/guides/#/warnings/js-date/ 了解更多信息....)
如何解决这个问题?
所以我这样做是为了避免折旧警告,而且它奏效了
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”进行硬编码的想法 -- 如果有更好的解决方案,我们将不胜感激
您非常接近解决方案,您必须使用 moment.utc
to tell moment that your input is UTC and pass 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>
这只是对 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");