У меня есть массив данных времени в формате HH:mm
как 13:58
. Предположим, что массив имеет 50 записей с разным временем. Как я могу сравнить новое время, например, 18:29
это больше, чем любой внутренний массив? Должен ли я конвертировать каждый раз в секундах или есть лучший подход?сравнение времени в javascript
ответ
Вы можете использовать momentjs:
var time1 = "18:58";
var time2 = "20:30";
var isBefore = moment(time1, "HH:mm").isBefore(moment(time2, "HH:mm"));
console.log(isBefore);
Вы можете написать функцию компаратора. Все, что вам нужно сделать, это передать час и минуты в конструктор даты и получить миллисекунды.
function toIntArray(arr) {
return arr.map(function(x) { return parseInt(x, 10) });
}
function timeToMillisecondsUTC(time) {
var tokens = toIntArray(time.split(':'));
return Date.UTC(1970, 0, 1, tokens[0], tokens[1]);
}
function timeCompare(a, b) {
return timeToMillisecondsUTC(a) - timeToMillisecondsUTC(b);
}
var dateStrings = [ '13:58', '18:29', '15:25', '12:01' ];
console.log(dateStrings.sort(timeCompare));
.as-console-wrapper { top: 0; max-height: 100% !important; }
Вот решение, которое использует регулярные выражения и String.replace
для преобразования времени в несколько минут, чтобы его можно было легко сравнить.
использует метод Array.every
, чтобы проверить, если каждая запись списка возвращает истину от функции предиката
let convert = s => s.replace(/(\d+):(\d+)/, (match, $1, $2) => $1*60 + $2*1);
let list = ["11:25", "10:38"];
let out = list.every(entry => convert(entry) > convert("18:29"));
console.log(out)
- это код es6? мне нужно перевести его? – user1765862
просто функция стрелки, возможно, потребуется переписать для более старого браузера, и вы можете легко переключить ее для обычной функции – alebianco
Если вы закодировать значения, как, например, '01: 02' строку сравнение должно работать нормально (хотя конверсия в секунды была бы предпочтительнее с моей точки зрения). – Sirko
Да, преобразование его в секунды было бы лучше, так как вам не нужно было делать расчеты на каждой итерации. Массив 'some', вероятно, вы хотите использовать. – epascarello
Конверсия в секунды всегда предпочтительна, так как сравнение строк даст вам ошибки, если вы забудете начальные нули. '" 2 "< "10" --> false' – Shilly