2017-02-06 3 views
1

У меня есть массив данных времени в формате HH:mm как 13:58. Предположим, что массив имеет 50 записей с разным временем. Как я могу сравнить новое время, например, 18:29 это больше, чем любой внутренний массив? Должен ли я конвертировать каждый раз в секундах или есть лучший подход?сравнение времени в javascript

+0

Если вы закодировать значения, как, например, '01: 02' строку сравнение должно работать нормально (хотя конверсия в секунды была бы предпочтительнее с моей точки зрения). – Sirko

+0

Да, преобразование его в секунды было бы лучше, так как вам не нужно было делать расчеты на каждой итерации. Массив 'some', вероятно, вы хотите использовать. – epascarello

+0

Конверсия в секунды всегда предпочтительна, так как сравнение строк даст вам ошибки, если вы забудете начальные нули. '" 2 "< "10" --> false' – Shilly

ответ

1

Вы можете использовать momentjs:

var time1 = "18:58"; 
var time2 = "20:30"; 

var isBefore = moment(time1, "HH:mm").isBefore(moment(time2, "HH:mm")); 
console.log(isBefore); 
0

Вы можете написать функцию компаратора. Все, что вам нужно сделать, это передать час и минуты в конструктор даты и получить миллисекунды.

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; }

0

Вот решение, которое использует регулярные выражения и 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)

+0

- это код es6? мне нужно перевести его? – user1765862

+0

просто функция стрелки, возможно, потребуется переписать для более старого браузера, и вы можете легко переключить ее для обычной функции – alebianco