我的目标是建立像Snapchat这样的功能,从现在起24小时内我发布的内容将被删除。我想创建一个API,用于检查当前时间是否已超过24小时,如果超过则将删除它,它将检查创建的时间和当前时间,并将在这两次之间进行比较。
我用时间将日期/时间存储到数据库。假设我的数据库代码如下所示
var mongoose = require('mongoose');
var moment = require('moment');
var ItemPost = new Schema({
name: String,
created: { type: Date, default: moment() },
timeLeft: { type: Number, default: 24 },
});
例如,如果我现在发布内容
11:31 PM 8 Jan 2017
假设现在的时间是上述时间。比方说9个小时过去了,现在的时间是
08:31 PM 9 Jan 2017
如何在创建日期后24小时内获得时间差异?
我的尝试
function checkTime(item) {
var currentTime = moment();
// assume item is an ItemPost object from the database
var timeStore = item.created()
// Im stuck here, I tried various codes. But nothing has worked so Far.
return data;
}
我想要的结果是
console.log(checkTime(item)); // 1 or 1 hour
我接近目标的真正尝试是
function test0() {
var currentTime = moment();
var timeStored = moment().subtract(7, 'hours');
var hoursMinus = timeStored.fromNow(currentTime);
console.log(hoursMinus); // 7 hours - it is a string
timeDiff = hoursMinus.substr(0, hoursMinus.indexOf(' ')); // will get just 7
var timeLeft = 24; // Default data from database
console.log(timeLeft - parseInt(timeDiff));
}
如果我减去 7
,这个解决方案效果很好var timeStored = moment().subtract(7, 'hours');
但如果时间大于或等于23
,它将无效var timeStored = moment().subtract(23, 'hours');
var hoursMinus = timeStored.fromNow(currentTime);
console.log(hoursMinus); // Will return "a day"
hoursMinus将返回a day
作为对我的算法
我的目标是从原始创建日期返回显示1 hour left
或7 hours left
的数据。任何帮助将不胜感激。
答案 0 :(得分:9)
您可以使用diff
方法。
这是一个工作示例:
function checkTime(item) {
var currentTime = moment();
var timeStore = moment(item.created);
return currentTime.diff(timeStore, 'h');
}
// Example Date object representing 5 hours ago
var item = {created: moment().subtract(5, 'h').toDate()};
var res = checkTime(item);
console.log(res); // 5

<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
&#13;