比较日期时间逻辑

时间:2016-08-18 15:15:20

标签: javascript date logic

我已经查看了其他问题但是我没有完全找到我的代码的问题。 我试图找到更新的2个日期,并且我已将DD,MM YY,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;

但是,如果例如第一个日期在日月和年份和小时中较少,但在分钟和秒中更大,我仍会遇到问题

例如: 如果时间1是18/7/2016 15:16:4而时间2是19/7/2016 18:14:59

即使时间2更新,它也会导致错误,它只是问题的秒数。 这可以通过别人修复吗?

2 个答案:

答案 0 :(得分:1)

对于您的问题:我正在尝试找到2个日期中较新的

我可以建议使用getTime()功能。

将能够按时间比较时间。

我们认为您有date1date2date1是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

<强> DATE2 Human time (GMT): Fri, 10 Jun 2016 16:30:50 GMT Epoch timestamp: 1465576250 Timestamp in milliseconds: 1465576250000

example here

convertor here

<强>更新 贝娄是一个功能的例子:

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

希望它会对你有所帮助。享受!

答案 1 :(得分:0)

关于解析的问题有很多答案,最重要的是你可以在几行中编写一个定制的函数,但是最好是让一个小的解析和格式化库来完成这项工作。其中有很多,例如moment.jsdate.jsfecha.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'))