2015-08-21 2 views
0

Я хочу, чтобы сравнить два раза
Так что я попробовал эти:Сравните два времени в JavaScript в формате «чч: мм TT»

"01:03 AM" > "01:02 AM" 
> true 


"01:01 AM" > "01:02 AM" 
> false 

В этих случаях результаты были правильный, но не в этом:

"12:55 AM" > "03:55 AM" 
> true 

Как я могу сравнить два t imes в этом формате "hh:mm tt" с правильной точностью? Нужно ли включать даты со временем, а затем сравнивать даты и время?

+0

Вы делаете сравнение строк и '1> 0' так! –

+0

Вы не можете сравнить строку как время, вы должны преобразовать время в timestamps, а затем сравнить те –

+0

, если хотите управлять датой, используя javascript, поэтому я рекомендую вам эту библиотеку javascript. http://momentjs.com/docs/ это очень мощный –

ответ

2

Обновление: Поскольку дата, отделяемая пространством, не поддерживается сафари, использование косой черты вместо пространства работает во всех браузерах.

Вам нужно будет преобразовать время в объект Date сначала, а затем в метку времени. Затем вы можете сравнить временную метку. Вы можете следовать этому основному примеру:

var t = new Date(); 
d = t.getDate(); 
m = t.getMonth() + 1; 
y = t.getFullYear(); 

//Convert time into date object 
var d1 = new Date(m + "/" + d + "/" + y + " " + "12:55 AM"); 
var d2 = new Date(m + "/" + d + "/" + y + " " + "03:55 AM"); 

//Get timestamp 
var t1 = d1.getTime(); 
var t2 = d2.getTime(); 
t1 > t2 ? alert("t1 greater than t2") : alert("t2 greater than t1"); 

Но для сложного сравнения времени вы должны использовать плагин.

+0

в сафари не работает, d1 и d2 - NaN – Alex

+0

@Alex У меня не было никаких ошибок. Вы можете попробовать эту демонстрацию в сафари: http: //jsfiddle.net/ph2oo7a6/ –

+0

Я отредактировал вашу скрипку, .. demo: http://jsfiddle.net/ph2oo7a6/1/, .. открыть эту ссылку в сафари – Alex

1

Преобразование времени в минутах и ​​сравнить

function toMin(str) { 
 
    var match = str.match(/(\d+):(\d+)\s(AM|PM)/) 
 
    var min = (+match[1] > 11 ? 0 : match[1] * 60) + +match[2]; 
 
    if (match[3].toLowerCase() == 'pm') { 
 
    min += 720; 
 
    } 
 
    return min; 
 
} 
 

 
function gt(v1, v2) { 
 
    snippet.log(v1 + ' > ' + v2 + ': ' + (toMin(v1) > toMin(v2))) 
 
} 
 

 
function lt(v1, v2) { 
 
    snippet.log(v1 + ' < ' + v2 + ': ' + (toMin(v1) < toMin(v2))) 
 
} 
 

 
//then 
 

 
gt('12:30 AM', '01:00 AM'); 
 
lt('12:30 AM', '01:00 AM');
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+0

как насчет этого случая? http://jsfiddle.net/cz1Lp6ap/1/ – Alex

+0

@Alex это действительный не так ли ... ожидаемый o/p –

+0

12:00 AM> 10:36: false, но 12 больше, чем 10? – Alex

Смежные вопросы