2016-09-16 3 views
-1

В Node.js, как сравнить дату с сегодняшней датой, если одна из дат является строкой?Сравнение Node.js

var retdate = new Date(); 
retdate.setDate(retdate.getDate()-7); 
var mydate = '2016-07-26T09:29:05.000Z' 

Как я сравниваю «retdate» и «» MyDate так она возвращает дату старше 7 дней? Я считаю, что строка должна быть изменена?

+0

использовать момент JS модуль http://momentjs.com/ – Beginner

+0

Извините, что вы имеете в виду 'поэтому она возвращает дату старше 7 дней?' –

+0

, как вы можете видеть, что он вычитается на 7 retdate, поэтому он означает, если вы хотите знать, если retdate на 7 дней старше mydate извините за слишком большое редактирование – Beginner

ответ

0

использовать момент Js просто добавить этот модуль в ваших зависимостей

var moment = require('moment'); 

retdate = moment(retdate).format('YYYY-MM-DD'); 
mydate = moment(mydate).format('YYYY-MM-DD'); 
+0

Спасибо за ваш ответ, я получаю сообщение об ошибке «Ошибка: не могу найти момент модуля». Любая идея почему? – tset

+0

добавьте его в свои модули узла.установите его – Beginner

+0

npm момент установки – Beginner

0

Изменено решение:

Поскольку ОП просит решение, которое основано на стандартных Javascript API.

Что вы можете сделать, так как ваша строка даты соответствует формату даты ISO-8601, вы можете создать объект Date, передав строку даты конструктору.

После того, как вы получили 2 Date объектов, вы можете прямо вычесть из объектов, давая вам epoch datetime. Поэтому, используя это, вам просто нужно разделить его на общее количество миллисекунд в неделю (7 дней), чтобы выяснить, является ли дата A старше даты B или нет.

Пример:

var retdate = new Date(); 
 
retdate.setDate(retdate.getDate()-7); 
 
var mydatestring = '2016-07-26T09:29:05.00'; 
 
var mydate = new Date(mydatestring); 
 

 
var difference = retdate - mydate; // difference in milliseconds 
 

 
const TOTAL_MILLISECONDS_IN_A_WEEK = 1000 * 60 * 24 * 7; 
 

 
if (Math.floor(difference/TOTAL_MILLISECONDS_IN_A_WEEK) >= 7) { 
 
    console.log("Current date is more than 7 days older than : " + mydatestring); 
 
}

MomentJS решение:

Как "Newbee Dev сказал MomentJS хороший JS модуль даты и времени для решения всех видов даты соответствующих проблемы.

Сначала проанализируйте строку datetime с помощью конструктора moment(...), а затем используйте API diff(...,'days'), чтобы выполнить сравнение дней.

Пример:

var datetime = '2016-07-26T09:29:05.000Z'; 
 
var localTime = moment(); 
 
var otherTime = moment(datetime); 
 

 
console.log("Current datetime is older than " + datetime + " by 7 days = " + (localTime.diff(otherTime, 'days') >= 7));
<script src="http://momentjs.com/downloads/moment.js"></script>

См: http://momentjs.com/

+0

Спасибо за ваш ответ. Я использую AWS Lambda. Lambda не позволяет импортировать модули. Есть ли workaournd для моей проблемы без использования модулей? – tset

+0

Не знаком с AWS лямбдой, но вы должны иметь возможность вставлять дополнительные узловые модули в ваше приложение NodeJS. Прочтите этот документ: http://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html –

+0

@tset на всякий случай, если вы не смогли установить установленный момент. У меня есть обновил мое решение, чтобы включить тот, который использует стандартный Javascript API. Надеюсь, что это поможет, дай мне крик, если у тебя проблемы с ним. –

1

Вы можете преобразовать дату в миллисекундах и сделать математику и преобразовать его обратно в стандартной даты.

//Today's date 
 
const today = new Date() 
 
    //Six days before today 
 
const sixDaysAgo = new Date(+(new Date()) - 6 * 24 * 60 * 60 * 1000) 
 
    //Seven days before today 
 
const sevenDaysAgo = new Date(+(new Date()) - 7 * 24 * 60 * 60 * 1000) 
 
    //One year ago 
 
const oneYearAgo = new Date(+(new Date()) - 365 * 24 * 60 * 60 * 1000) 
 
    //Given date from a date string 
 
const givenDate = new Date("2016-07-26T09:29:05.000Z") 
 

 
//Convert the range of days to milliseconds 
 
//(This wont work if the date very old) 
 
const sevenDaysInMiliSec = 7 * 24 * 60 * 60 * 1000 
 

 
var dateToValidate = sevenDaysAgo; 
 

 
if (today - dateToValidate >= sevenDaysInMiliSec) { 
 
    console.log(dateToValidate + " is seven days older or more") 
 
} else { 
 
    console.log(dateToValidate + " is less than seven days old") 
 
} 
 

 
dateToValidate = sixDaysAgo; 
 

 
if (today - dateToValidate >= sevenDaysInMiliSec) { 
 
    console.log(dateToValidate + " is seven days older or more") 
 
} else { 
 
    console.log(dateToValidate + " is less than seven days old") 
 
} 
 

 
dateToValidate = oneYearAgo; 
 

 
if (today - dateToValidate >= sevenDaysInMiliSec) { 
 
    console.log(dateToValidate + " is seven days older or more") 
 
} else { 
 
    console.log(dateToValidate + " is less than seven days old") 
 
} 
 

 
dateToValidate = givenDate; 
 

 
if (today - dateToValidate >= sevenDaysInMiliSec) { 
 
    console.log(dateToValidate + " is seven days older or more") 
 
} else { 
 
    console.log(dateToValidate + " is less than seven days old") 
 
}