2015-09-23 3 views
0

Мне нужно сравнить два времени в javascript. Даты у меня есть формыСравнение datetimes в javascript в формате ГГГГ-ММ-ДД ЧЧ: ММ: SS

YYYY-MM-DD HH:MM:SS. 

Я использую следующий код для его

var date1 = new Date("2015-08-20 09:38:20"); 
var date2 = new Date("2015-08-20 08:00:00"); 

Проблема здесь в том, что, когда я использую «/» вместо «-», я получаю ожидаемые результаты. Но когда для этого формата я

date1 > date 

возвращает ложные

Использование momentJs это не вариант для меня, а также я получаю даты из soemewhere так бы сохранить формат. Как сравнить даты указанного выше заданного формата в JavaScript

+0

использование momentjs, гораздо проще управлять DateTimes и будет хорошим долгосрочным решением для различных проблем – Muthu

+0

Yups, я полностью согласен с вами, но не вариант для меня в этом случае. –

+0

'date1> date2 === true' фактически в этом случае. – raina77ow

ответ

1

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

var date1 = '2015-08-20 09:38:20'; 
var date2 = '2015-08-20 08:00:00'; 
var date1Updated = new Date(date1.replace(/-/g,'/')); 
var date2Updated = new Date(date2.replace(/-/g,'/')); 
console.log(date1Updated > date2Updated); 
+0

Различные выходные данные в firefox –

+0

Хотя метод хорош, но он не работает, точной причиной является date1Updated будет '2015/08-20 09:38:20' –

+0

Он работает, если он изменен как 'new Date (date1. замените (/ -/g, '/')) ' –

1

Я не был в состоянии воспроизвести данное поведение, но вы можете попробовать преобразования date1 и date2 переменные в милисекундах и сохранение тех, в отдельных Варс с 1 янв 1970.

var date1_ms = date1.getTime(); 
var date2_ms = date2.getTime(); 

это дает (для данного примера)

1440056300000 
1440050400000 

и в сравнении

date1_ms > date2_ms 

возвращает истинное

+0

Попробуйте в firefox. Вы можете воспроизвести проблему. –

+0

Попробуйте использовать js.do, интерактивную Javascript IDE, я могу получить конкретное поведение там –

1

Это характерно для дат JavaScript. Кажется, что все браузеры обрабатывают строки даты по-разному. Мой опыт заключается в написании собственного анализатора, если вы знаете формат, с которым хотите иметь дело.

Что-то вроде ниже будет работать. Не стесняйтесь прибирать его и сделать его более универсальным для вашего собственного использования.

function parseDateString(dateString) { 
    var dateParts = dateString.split(' '); 
    var dateOnlyString = dateParts[0]; 
    var timeString = dateParts[1]; 
    var dateOnlyParts = dateOnlyString.split('-'); 
    var year = dateOnlyParts[0]; 
    var month = dateOnlyParts[1] - 1; 
    var day = dateOnlyParts[2]; 
    var timeParts = timeString.split(':'); 
    var hours = timeParts[0]; 
    var minutes = timeParts[1]; 
    var seconds = timeParts[2]; 
    return new Date(year, month, day, hours, minutes, seconds); 
} 

jsfiddle для теста: http://jsfiddle.net/04nh4q9w/

1
function getDate(dateString) { 
    //This function assumes that the dateString will always be of the format YYYY-MM-DD HH:MM:SS 
    var dateParts = dateString.split(' '); 
    var dateStr = dateParts[0].split('-'); 
    var timeStr = dateParts[1].split(':'); 
    var dateTimeArr = datestr.concat(timestr) 
    return new Date(dateTimeArr[0], dateTimeArr[1]-1, dateTimeArr[2], dateTimeArr[3], dateTimeArr[4], dateTimeArr[5]); 
} 

var date1 = getDate("2015-08-20 09:38:20"); 
var date2 = getDate("2015-08-20 08:00:00"); 

date1> date2 будет верно для любого браузера.

0
function convertTo24Hour(time) { 
     time = time.toUpperCase(); 
     var hours = parseInt(time.substr(0, 2)); 
     if(time.indexOf('AM') != -1 && hours == 12) { 
      time = time.replace('12', '0'); 
     } 
     if(time.indexOf('PM') != -1 && hours < 12) { 
      time = time.replace(hours, (hours + 12)); 
     } 
     return time.replace(/(AM|PM)/, ''); 
    }