[英]Cannot overwrite date with moment.js
我有一系列活動和 MongoDB。 活動也有日期。 我正在嘗試動態構建一個表,其中包含保存在我的集合中的所有活動。 因此,我想在將 JSON 對象數組發送到我的 jade 文件之前使用 moment.js 更改日期格式。
我嘗試創建一個新的結果數組並將其發送到我的玉文件中。
router.get('/', function(req, res, next) {
activitiesController.getActivities(function(results) {
if(!results) {
results = [];
}
for(var key in results) {
results[key].date = moment(results[key].date).format('ddd, hA');
}
res.render('index', {
activities: results
})
});
});
這是結果數組的外觀:
[{
"_id" : ObjectId("56fe2c0d7afcafa412ae19c2"),
"title" : "Fitnessstudios",
"category" : "Sport",
"time" : 2,
"date" : ISODate("2016-03-30T00:00:00.000Z"),
"__v" : 0
}]
您的問題是您傳遞給 moment.js 的值是:
ISODate("2016-03-30T00:00:00.000Z")
當它只需要日期字符串部分時:
"2016-03-30T00:00:00.000Z"
所以只獲取日期字符串並傳遞它,下面的代碼片段展示了如何做到這一點。
var dateString = 'ISODate("2016-03-30T00:00:00.000Z")'.replace(/^[^\\"]+\\"([^\\"]+)\\".*$/,'$1'); document.write(dateString);
moment.js 可能會在沒有進一步幫助的情況下很好地解析 ISO 字符串,但是我認為告訴它格式會更好,因此您應該使用以下內容:
var dateString = results[key].date.replace(/^[^\"]+\"([^\"]+)\".*$/,'$1');
results[key].date = moment(dateString,'YYYY-MM-DDThh:mm:ss.sssZ').format('ddd, hA');
// Wed, 10AM
並且您不應該在數組上使用for..in ,您可能會以不同的順序找到您期望的屬性以外的屬性。 根據需要使用普通的for 、 while或do循環或循環方法之一,如forEach 、 map等。
改變這個:
moment(results[key].date).format('ddd, hA');
到
moment(new Date(results[key].date.toString()),moment.ISO_8601).format('ddd, hA');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.