Проверьте, не старше 2 недель от даты

#javascript #momentjs

#javascript #momentjs

Вопрос:

Я пытаюсь создать if оператор, который проверяет дату на соответствие текущей дате и выдает error , если ей меньше 2 недель.

Мой текущий код

 const moment = require('moment')
const today = moment().format()

const createdDate = '2020-07-30'
if (createdDate <= today ) {
console.log('Good')
} else {
console.log('Bad')
};
console.log(today)
  

Был бы признателен за любые предложения.

Комментарии:

1. Что такое «момент» и зачем это требуется? Почему бы просто не использовать встроенные функции Date()?

2. moment — это обычная библиотека дат для работы с датами JS. Появились собственные функции date, но многим разработчикам немного проще работать с moment API. Очевидно, что у него есть недостатки (сторонний, может увеличить время связки при использовании на клиенте и т.д.), Но он широко используется и хорошо поддерживается.

Ответ №1:

Вы можете использовать subtract функцию moments вместе с isSameOrAfter . Есть другой вариант, при котором вы добавляете две недели к CreatedDate и сравниваете это сегодня. В зависимости от того, что для вас имеет больше смысла.

 const today = moment();
const createdDate = moment("2020-08-30")

if (today.subtract(2, 'weeks').isSameOrAfter(createdDate)) {
   console.log('good')
} else {
   console.log('bad')
}
  

Ответ №2:

Вы можете сделать это двумя способами и выбрать тот, который вам больше подходит. Оба solution приведенных ниже варианта идеально подойдут для вашего сценария.

Вы можете просто использовать функцию diff момента, получая разницу days в числах, и если difference больше или равно 14 дням, то good иначе это будет bad .

Используя функцию diff

Живая демонстрация:

 var today = moment().startOf('day')
var createdDate = moment("2020-07-30", "YYYY-MM-DD").startOf('day')
var diff = today.diff(createdDate, 'days')

if (diff >= 14) {
  console.log('Good')
} else {
  console.log('Bad')
};  
 <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.js"></script>  

Используя функцию добавления и функцию клонирования, получите результаты

Вы можете использовать функцию добавления вместе с clone и с помощью startOf функции day, чтобы убедиться, что мы всегда получаем дату от начала дня, а не когда при выполнении операции проверки для сравнения.

Живая демонстрация:

 let today = moment().startOf('day').format('YYYY-MM-DD') //today
let createdDate = moment('2020-07-30', 'YYYY-MM-DD').clone().add(14, 'days').startOf('day').format('YYYY-MM-DD') //created date minus two weeks
if (createdDate <= today) {
  console.log('Good')
} else {
  console.log('Bad')
};  
 <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.js"></script>  

Ответ №3:

Вы также можете использовать add функцию Moment .

 const today = moment();
const createdDate = moment("2020-07-30")

if (createdDate.add(2, 'weeks').isSameOrAfter(today)) {
   console.log('good to go!')
} else {
   console.log('bad')
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js" integrity="sha256-ZsWP0vT akWmvEMkNYgZrPHKU9Ke8nYBPC3dqONp1mY=" crossorigin="anonymous"></script>