2017-01-08 3 views
0

Моя цель - создать такую ​​функцию, как snapchat, через 24 часа содержимое, которое я опубликую, будет удалено. Я хочу создать API, который будет проверять, прошло ли текущее время за 24 часа или нет, если прошло, то он удалит его, он проверит созданное время и текущее время, и он будет сравнивать эти два времени.Проверка разницы во времени через 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)); 
} 

Ну это решение работает хорошо, если I вычесть

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 с оригинальной созданной датой. Любая помощь будет оценена по достоинству.

ответ

3

Вы можете использовать способ 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>

+0

Спасибо за ответ, я буду стараться его немедленно. – sinusGob

+0

@sinusGob сообщите мне, если все в порядке и не забудьте принять ответ, если он решит вашу проблему. – VincenzoC

+0

Спасибо, что работает !! – sinusGob