至于建议HERE: 可以在JavaScript中使用Date对象:
var prevTime = new Date(2011,1,1,0,0); // Feb 1, 2011
var thisTime = new Date(); // now
var diff = thisTime.getTime() - prevTime.getTime(); // now - Feb 1
alert(diff/(1000*60*60*24)); // positive number of days
编辑:我想你标记的JavaScript,但要求对MySQL
至于建议HERE: 如果您正在使用DATE或DATETIME格式为您的列,您可以使用:
SELECT DATEDIFF(STR_TO_DATE('2014-01-01', '%Y-%m-%d'),STR_TO_DATE('2014-01-04', '%Y-%m-%d')) AS DAYS
Hope帮助
EDIT2这里是一个很好的方式,采用了一些逻辑做一个声明:
SELECT (CASE
WHEN Start_date1 <= End_date2 THEN
1+DATEDIFF(End_date2, Start_date1)
WHEN Start_date2 <= End_date1 THEN
1+DATEDIFF(End_date1, Start_date2)
ELSE 0
END) AS DAYS
FROM TABLE
的逻辑是: 日期1开始日期2结束前,Start_date1> = End_date2
OR
Date2在Date1结束之前开始,Start_date2> = End_date1
如果两者都不成立,它们不会重叠。
请编辑问题并显示数据库中数据的格式。样本数据和期望的结果确实有帮助,至少在涉及SQL的问题上。 – 2014-09-06 13:04:41
我可能会通过构建一个“所有可能的日期”表(具有一些限制启发式将会有所帮助),然后在该表和每个范围之间进行外连接,过滤那些没有匹配连接的记录并计算结果。 – eggyal 2014-09-06 13:12:23
听起来好像你正在计算由可能重叠的开始/结束日期对集合定义的日期范围的总体持续时间。那是对的吗? – 2014-09-06 14:39:27