2016-08-18 3 views
0

Я просмотрел другие вопросы, но havn't нашел проблему с моим кодом точно. Я пытаюсь найти новый 2 даты, и я расколоть ДД, ММ ГГ, HH, MM, SS в переменные, так что я могу сделать следующее и сравнитесравнение времени времени логика

var bool = false 
    if (year1 <= year2) 
     if (month1 <= month2) 
      if (day1 <= day2) 
       if (hours1 <= hours2) 
        if (minutes1 <= minutes2) 
         if (seconds1 <= seconds2) 
          bool = true; 
return bool; 

Однако я по-прежнему работать в если, например, первая дата меньше в месяце месяца и году и часе, но больше в минутах и ​​секундах

ex: если время 1 - 18/7/2016 15: 16: 4 и время 2 - 19/7/2016 18:14:59

это привело бы к ложному, хотя время 2 более новое, это всего лишь секундная проблема. Можно ли это установить другим?

+1

Почему не делают просто: 'если (Год1 <= YEAR2 && MONTH1 <= Month2 && день1 < = day2 && hours1 <= hours2 && minutes1 <= minutes2 && seconds1 <= seconds2) { \t \t bool = true; \t} '? – vaso123

+0

Зачем сначала разбивать дату в полях, а не использовать собственные операторы сравнения на объектах Date? – Aaron

+0

Возможный дубликат [Сравнить две даты с JavaScript] (http://stackoverflow.com/questions/492994/compare-two-dates-with-javascript) – Aaron

ответ

1

Для вашего вопроса: Я пытаюсь найти новые 2 даты

Я могу предложить использовать getTime() функции.

Будет иметь возможность сравнивать время по тикам.

Предположим, у вас есть date1 и date2. date1 является 2015-06-10 15:20:30 и date2 является 2016-06-10 16:30:50

date1.getTime() будет меньше, чем date2.getTime()

date1 Human time (GMT): Wed, 10 Jun 2015 15:20:03 GMT Epoch timestamp: 1433949603 Timestamp in milliseconds: 1433949603000

дата2 Human time (GMT): Fri, 10 Jun 2016 16:30:50 GMT Epoch timestamp: 1465576250 Timestamp in milliseconds: 1465576250000

example here

convertor here


Update: пыльник является примером функции:

// returns true if date1 is newer than date2 and false viceversa 
function compareForNewer(date1, date2) { 
    return date1.getTime() > date2.getTime(); 
} 

Или, вы можете вернуться всегда на новую дату. В следующем порядке:

// returns the newer date 
function getNewer(date1, date2) { 
    return date1.getTime() > date2.getTime() ? date1 : date2; 
} 

Надеюсь, это вам поможет. Наслаждайтесь!

+0

звучит логично, я попробую, спасибо – user3676224

+0

@ user3676224 Я добавил примеры функций;) Удачи! – meorfi

+0

Нет необходимости * getTime *, 'date1> date2' является достаточным, так как оператор'> 'принуждает аргументы к Number и возвращает значение внутреннего времени Date, то же, что и * getTime *. – RobG

0

Здесь есть много ответов на вопросы о разборе, суть в том, что вы можете написать функцию на заказ в нескольких строках, но, вероятно, лучше получить небольшую библиотеку разбора и форматирования, чтобы выполнить эту работу. Их много, таких как moment.js, date.js и fecha.js.

Например, с помощью функции fecha.JS и предполагая входной формат как 18/7/2016 15:16:40, которые должны рассматриваться как местные, вы бы сделать getEarliest функция что-то вроде:

/* Convert args to Dates, return earliest as a Date 
** or first as a date if they are equal. 
** requires fecha.js https://github.com/taylorhakes/fecha 
** 
** @param {string} dateStr0 - date string in DD/MM/YYYY hh:mm:ss format 
** @param {string} dateStr1 - date string in DD/MM/YYYY hh:mm:ss format 
** @returns {Date} earliest of dateStr0 and dateStr1 or dateStr0 if equal 
*/ 
function getEarliest(dateStr0, dateStr1) { 
    var d0 = fecha.parse(dateStr0, 'DD/MM/YYYY hh:mm:ss'); 
    var d1 = fecha.parse(dateStr1, 'DD/MM/YYYY hh:mm:ss'); 
    return d1 < d0? d1 : d0; 
} 

Без общего синтаксического анализа, вы можете используйте следующую функцию и используйте ее для замены бит разбора. Вы должны также проверить результат разбора, чтобы убедиться, что создан действующий Дата:

/* Parse string in format DD/MM/YYYY hh:mm:ss 
 
** @param {string} s - date string in format DD/MM/YYYY hh:mm:ss 
 
** @returns {Date} if values invalid, returns invalid Date 
 
*/ 
 
function parseDate(s) { 
 
    var b = s.split(/\D/); 
 
    var d = new Date(b[2], --b[1], b[0], b[3], b[4], b[5]); 
 
    return d && d.getMinutes() == b[4] && d.getDate() == b[0] && d.getMonth() == b[1]? d : new Date(NaN); 
 
} 
 

 
/* Convert args to Dates, return earliest as a Date 
 
** or first as a date if they are equal. 
 
** If either date is invalid, returns undefined 
 
** 
 
** @param {string} dateStr0 - date string in DD/MM/YYYY hh:mm:ss format 
 
** @param {string} dateStr1 - date string in DD/MM/YYYY hh:mm:ss format 
 
** @returns {Date} earliest of dateStr0 and dateStr1 or 
 
**     dateStr0 if equal or 
 
**     undefined if either is invalid 
 
*/ 
 
function getEarliest(dateStr0, dateStr1) { 
 
    var d0 = parseDate(dateStr0); 
 
    var d1 = parseDate(dateStr1); 
 
    if (isNaN(d0) || isNaN(d1)) return; 
 
    return d1 < d0? d1 : d0; 
 
} 
 

 
// Both valid dates 
 
console.log(getEarliest('15/08/2016 15:23:48', '18/08/2016 17:25:08')) 
 

 
// One date invalid 
 
console.log(parseDate('15/08/2016 15:73:48', '18/08/2016 17:25:08'))

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