#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>