使用时刻

时间:2017-01-08 15:55:51

标签: node.js mongoose 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 },
});

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

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 left7 hours left的数据。任何帮助将不胜感激。

1 个答案:

答案 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;
&#13;
&#13;