Как получить разницу часов между сегодняшним днем ​​и следующей пятницей - PullRequest
1 голос
/ 29 мая 2019

Я хочу получить разницу часов между текущей и следующей пятницей 18:00 (выходными) с помощью моментов, я пробовал это, но это не работает:

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.log(diff.days())
    if (diff.days() * 24 + diff.hours() <= 99) {
      return nextFriday.toString()
    } else {
      return 0
    }
  }
}

console.log (diff.days ()) печатает 6 дней, тогда как мы среда

Ответы [ 6 ]

2 голосов
/ 29 мая 2019

попробуйте это:

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.log(`${diffHours} hours`) // 31.7 hours
        if (diffHours <= 99) {
          return nextFriday.toString()
        } else {
          return 0
        }
      }
1 голос
/ 29 мая 2019

Я рекомендовал использовать moment

const diff = moment.duration(nextFriday.diff(moment()))
const deepDiff = diff.format("D [day], H [hour and] m [min]")
0 голосов
/ 29 мая 2019

Вы можете использовать разницу часов, используя метод (now - next Friday) / 60*60*1000, попробуйте:

const nextFriday = moment().day(5)
var hours = Math.abs(new Date() - nextFriday) / 36e5; 
console.log(hours);

Примечание: 36e5 - научное обозначение для 60 * 60 *1000* 1006 *

0 голосов
/ 29 мая 2019

Moment.js имеет встроенную функцию .fromNow (), которая возвращает время между данным временем и местным временем.Таким образом, единственной строкой, которую нужно изменить, является .weekday (4), потому что пятница - это будний день (5).и вызовите функцию .fromnow ().

console.log(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 имеет встроенное решение для этого.

0 голосов
/ 29 мая 2019

https://jsfiddle.net/7ehoq06n/

Если вы просто позвоните moment().weekday(5), он перейдет в пятницу "этой недели", что означает, что если вы находитесь в субботу, он перейдет в ВЧЕРА.

Если вы хотите в следующую пятницу, всегда в будущем, используйте это:

var today = moment();
var friday = moment().weekday(5);
if (friday < today) {
    friday.add(1, 'weeks');
}
0 голосов
/ 29 мая 2019

ОБНОВЛЕНО , теперь это абсолютно правильно.

Прежде всего, пятница на самом деле имеет порядковый номер 5, поэтому используйте его вместо 4. const nextFriday = moment().weekday(5) - это правильная пятница.

Следующим важным моментом является то, что по умолчанию берется ближайшая пятница, это означает, что можно выбрать уже прошедшую пятницу (например, если сегодня суббота).В таком случае нам просто нужно добавить одну неделю.

Вот рабочий фрагмент кода:

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.log(`Friday 18:00 will be in ${hoursToFriday} hours`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
...