Я хочу получить разницу в часах между 18:00 и следующей пятницей (выходные), используя momentjs, я пробовал это, но это не работает:
public getWeekend() {
const nextFriday = moment().weekday(4)
nextFriday.hours(18) // Weekend time: 18:00
nextFriday.minutes(0)
nextFriday.seconds(0)
const diff = moment(nextFriday.diff(moment()))
console.info(diff.days())
if (diff.days() * 24 + diff.hours() <= 99) {
return nextFriday.toString()
} else {
return 0
}
}
}
console.info(diff.days()) печатает 6 дней, тогда как сейчас среда
ОБНОВЛЕНО , теперь это совершенно правильно.
Во-первых, пятница на самом деле имеет порядковый номер 5
, поэтому используйте его вместо 4.
const nextFriday = moment().weekday(5)
- это правильная пятница.
Следующим важным моментом является то, что ближайший Friday берется по умолчанию, это означает, что можно выбрать уже прошедшую пятницу (например, если сегодня суббота). В таком случае нам просто нужно добавить одну неделю.
Вот рабочий фрагмент кода:
function getWeekend() {
const today = moment();
const friday = moment().weekday(5);
// check if wee need to add one week in case of previous Friday selected
if (friday < today) {
friday.add(1, 'weeks');
}
friday.hours(18) // Weekend time: 18:00
friday.minutes(0)
friday.seconds(0)
return friday.diff(moment(), 'hours');
}
const hoursToFriday = getWeekend();
console.info(`Friday 18:00 will be in ${hoursToFriday} hours`);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
Это неправильно, потому что, если вы запустите этот код в СУББОТУ, он не даст вам СЛЕДУЮЩУЮ пятницу, он даст вам предыдущую пятницу.
Я пробовал. Вот почему я так сказал.
На данный момент для меня выход составляет 53 часа, и это правильное количество часов до следующей пятницы.
Я не думаю, что вы понимаете, что я сказал. Я сказал, что если вы запустите этот код в субботу, он даст вам неверный результат. Это дает вам правильный результат сегодня, потому что сегодня не суббота.
Теперь я понял. Извините за это, вы правы в этом случае. Собираюсь изменить свой ответ....
Только что обновил ответ. Теперь он работает правильно. Спасибо @TKoL
Я рекомендовал использовать moment
const diff = moment.duration(nextFriday.diff(moment()))
const deepDiff = diff.format("D [day], H [hour and] m [min]")
https://jsfiddle.net/7ehoq06n/
Если вы просто позвоните moment().weekday(5)
, он перейдет на пятницу «этой недели», а это значит, что если вы в субботу, он перейдет на ВЧЕРА.
Если вы хотите следующую пятницу, всегда в будущем, используйте это:
var today = moment();
var friday = moment().weekday(5);
if (friday < today) {
friday.add(1, 'weeks');
}
Moment.js имеет встроенную функцию .fromNow(), которая возвращает время между заданным временем и местным временем. Таким образом, вам нужно изменить только 2 строки: .weekday(4), потому что пятница — это день недели (5). и вызовите функцию .fromnow().
console.info(getWeekend());
function getWeekend() {
const nextFriday = moment().weekday(5);
nextFriday.hours(18); // Weekend time: 18:00
nextFriday.minutes(0);
nextFriday.seconds(0);
return nextFriday.fromNow();
}
<script src = "https://momentjs.com/downloads/moment.min.js"></script>
Обратите внимание, что fromNow вернет строку. Moment.js имеет для этого встроенное решение.
попробуй это:
function getWeekend() {
const nextFriday = moment().weekday(4)
nextFriday.hours(18) // Weekend time: 18:00
nextFriday.minutes(0)
nextFriday.seconds(0)
const diffHours = moment.duration(nextFriday.diff(moment())).asHours()
console.info(`${diffHours} hours`) // 31.7 hours
if (diffHours <= 99) {
return nextFriday.toString()
} else {
return 0
}
}
Вы можете измерить разницу в часах, используя метод (now - next Friday) / 60*60*1000
. Попробуйте:
const nextFriday = moment().day(5)
var hours = Math.abs(new Date() - nextFriday) / 36e5;
console.info(hours);
Примечание: 36e5
— это научное обозначение 60*60*1000.
Ваш способ расчета следующей пятницы не работает в субботу, см. комментарии к ответу Артема Архипова.
Проверьте мой обновленный ответ.