如何计算两个日期之间的时差,考虑:
示例:
计算步骤:
ddiff(d2,d1)= 12:00:00
我知道如何只使用mon-fri,as described here。我说的是MySQL。
答案 0 :(得分:2)
我提出了一个解决方案,它可以相对简单地计算完整临时日期的时差。然而,使用mysql来计算开始和时间的差异有点麻烦。结束日期。我将包含在我的解决方案中,但有许多假设。
无论如何,这是sql
SET @startdate:='2012-12-24 17:00:00';
SET @enddate:='2013-01-02 12:00:00';
SELECT
TIME_TO_SEC(TIMEDIFF(CONCAT(DATE(@startdate),' 17:30:00'), @startdate))/3600 as startday_time,
TIME_TO_SEC(TIMEDIFF(@enddate, CONCAT(DATE(@enddate),' 9:00:00')))/3600 as endday_time,
SUM(daily_hours) as otherdays_time from
(
SELECT 7.5 as daily_hours, id, DATE_ADD(DATE(@startdate),INTERVAL id-1 DAY) as idate from numbers
) dates
LEFT JOIN holidays on DATE(dates.idate) = DATE(holidays.date)
WHERE
idate BETWEEN @startdate AND @enddate
AND holidays.date IS NULL
AND DAYOFWEEK(idate) <> 7 AND DAYOFWEEK(idate) <> 1;
sqlfiddle: http://sqlfiddle.com/#!2/ff3f3/1/2
要获得有效的临时日期,我们需要两个表 - 一个列出所有假日日期的holidays
表和一个包含一系列整数的numbers
表,这对于加入非常有用获得一系列连续的日期(没有间隙)。
注意:在sqlfiddle中,我只填充了numbers
表,最多12个,以涵盖我的示例中使用的日期 - 根据日期范围,可能需要填充更高的数字你会和你一起工作。
开始日期&amp;结束的一天,我做了以下假设:
如果这些假设是错误的,那么你就会进入严格的条件区域(有很多ifs)并且可能最好在php(或其他)中这样做。
注意:为了便于说明,我已将时间(以小时为单位)添加为未添加。