我已经查看了其他问题但是我没有完全找到我的代码的问题。 我试图找到更新的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更新,它也会导致错误,它只是问题的秒数。 这可以通过别人修复吗?
答案 0 :(得分: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
<强> DATE2 强>
Human time (GMT): Fri, 10 Jun 2016 16:30:50 GMT
Epoch timestamp: 1465576250
Timestamp in milliseconds: 1465576250000
<强>更新强> 贝娄是一个功能的例子:
// 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.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'))