使用Moment从现在起24小时检查时差

sin*_*Gob 0 mongoose node.js momentjs

我的目标是建立像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 },
});
Run Code Online (Sandbox Code Playgroud)

例如,如果我现在发布内容

11:31 PM 8 Jan 2017
Run Code Online (Sandbox Code Playgroud)

假设现在的时间是上述时间.比方说9个小时过去了,现在的时间是

08:31 PM 9 Jan 2017
Run Code Online (Sandbox Code Playgroud)

如何在创建日期后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;

}
Run Code Online (Sandbox Code Playgroud)

我想要的结果是

console.log(checkTime(item)); // 1 or 1 hour
Run Code Online (Sandbox Code Playgroud)

我接近目标的真正尝试是

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));
}
Run Code Online (Sandbox Code Playgroud)

如果我减去7,这个解决方案效果很好

var timeStored = moment().subtract(7, 'hours');
Run Code Online (Sandbox Code Playgroud)

但如果时间大于或等于23,它就不会起作用

var timeStored = moment().subtract(23, 'hours');
var hoursMinus = timeStored.fromNow(currentTime);
console.log(hoursMinus); // Will return "a day"
Run Code Online (Sandbox Code Playgroud)

hoursMinus将返回a day为我的算法不好的值

我的目标是返回一个说明1 hour left7 hours left来自原始创建日期的数据.任何帮助,将不胜感激.

Vin*_*zoC 13

你可以使用矩量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
Run Code Online (Sandbox Code Playgroud)
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)