Получить оставшееся время с массивом для часов работы - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь создать обратный отсчет, чтобы получить оставшееся время до закрытия магазина

// My array for the opening hours :
var openTime = [
  { open : 9, close : 17},
  { open: 9, close : 18 },
  { open: 9, close : 18 },
  { open: 9, close : 18 },
  { open: 9, close : 18 }, 
  { open: 9, close : 18 },
  { open: 10, close : 16.5 }
]

var current = new Date();
var day = current.getDay();
var currentTime = current.getHours() + (current.getMinutes() / 60);
var remainTime = 0;

if (openTime[day].open >= 0 && openTime[day].open < currentTime && openTime[day].close >
  currentTime) {
  remainTime = (openTime[day].close - currentTime).toFixed(2)
}

console.log("the shop will close in %s hours", remainTime);

Но у меня есть проблема с этой строкой:

var currentTime = current.getHours() + (current.getMinutes()/60);

Потому что, когда я выполняю код, например, на самом деле это 17h22, код показывает мне на моем отладчике, что текущее время равно 17,36?

Что-то не так с линией, потому что это дает мне неправильное оставшееся время ...

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Если вы хотите текущее время в виде строки, вы должны:

var currentTime = current.getHours() + ":" + (current.getMinutes() / 60);

, но это не то, что вы хотите, я думаю. Вы получаете coures 17.36, потому что 17:22, преобразованное в десятичное основание 10 вместо 60 минут, дает это значение (22 мин / 60 = 0,363636, округленные до двух цифр 0,36). Если вы хотите, чтобы таймер работал, вы конвертируете либо обратно десятичную часть на * 60, чтобы легко найти его. Используйте:

 var decimalPart = remainTime % 1;
 var remainTimeHours =  remainTime - decimalPart;
var remainTimeMin  = decimalPart * 60;

Конечно, вы можете упростить это - просто чтобы показать логи c
- во время вашего закрытия вы уже используете 16,5 означает 16:30 или должно быть 16:50 - > затем 16,83
или предпочтительный отдельный лог c для часов и минут, не преобразованных в десятичную с использованием четных секунд, если это необходимо.

0 голосов
/ 26 марта 2020

0,36 часа (десятичная величина) равняется 21,6 (≈22) минут.

Десятичное число просто преобразовать в минуты: 60*decimal. Или (60*decimal).toFixed(0) или (60*decimal).round(), если вы хотите округлить число.

Кроме того, помните, что JS использует время устройства. Сегодня большинство устройств синхронизируют c свое время, но если вы не хотите на него полагаться, вы должны перенести время со своего сервера (ie. Сохранить его в переменную JS во время предварительной обработки, например * 1008). *).

...