原版:
然后转成"1234555512344445123333451222234511112345001234550"
在
SET @s = STR_TO_DATE('2017-5-01', '%Y-%m-%d');
SET @e = STR_TO_DATE('2017-5-31', '%Y-%m-%d');
SET @weekDays = 5 * (DATEDIFF(@e, @s) DIV 7) +
MID('1234555512344445123333451222234511112345001234550', 7 * WEEKDAY(@s) + WEEKDAY(@e) + 1, 1);
中可以完美计算所有以周六日为双休的工作日有多少天。
但如果双休是周日和周一呢?
首先要将实际双休重新标记:
从上面的矩阵,首先得知,横轴和竖轴交叉的第一个双休日都是0(因为非工作日,不予计算),那么得出:
类推到第二个双休日:
…其实下面就是按上面横轴和竖轴对应新的周一到周日,逐个搬过来:
然后转成"0123455512345545123443451233234512212345110123450"
在
SET @s = STR_TO_DATE('2017-5-01', '%Y-%m-%d');
SET @e = STR_TO_DATE('2017-5-31', '%Y-%m-%d');
SET @weekDays = 5 * (DATEDIFF(@e, @s) DIV 7) + \
MID('0123455512345545123443451233234512212345110123450', 7 * WEEKDAY(@s) + WEEKDAY(@e) + 1, 1);
中可以完美计算所有以周日和周一为双休的工作日。在excel中实测如下图: