我已经完成了这个功能,因此我的工作日没有计算两个日期之间的周末,在数据库中我将日期字段作为DATATIME,但在执行时我收到此错误:
遇到非正确形成的数值
功能如下:
function diashabiles ($fecha_inicio, $fecha_fin) {
list ($year, $month, $day) = explode ("/", $fecha_inicio);
$ini = mktime (0, 0, 0, $month, $day, $year);
list ($yearf, $mesf, $diaf) = explode ("/", $fecha_fin);
$fin = mktime (0, 0, 0, $mesf, $diaf, $yearf);
$newArray = array ();
$r = 1; $i = 0; $dia2 = 0;
while ($ini! = $fin) {
$ini = mktime (0, 0, 0, $month, $day + $r, $year);
$newArray [$i] = $ini;
$r++; $i++;
}
for ($i = 0; $i <count($newArray); $i++) {
$day = $newArray [$i];
$date = getdate($day);
if ($date["wday"] == 0 or $date["wday"] == 6) {
$dia2++;
}
}
$rlt = count($newArray) - $dia2;
return $rlt;
}
谢谢!!
答案 0 :(得分:1)
问题在于此代码:
list ($year, $month, $day) = explode ("/", $fecha_inicio);
$ini = mktime (0, 0, 0, $month, $day, $year);
list ($yearf, $mesf, $diaf) = explode ("/", $fecha_fin);
$fin = mktime (0, 0, 0, $mesf, $diaf, $yearf);
您说最初存储的数据是DATE格式,这意味着数据库中出现的数据只是一年,一月和一天。然后,您将数据类型更改为DATETIME,这显然会更改数据库中存储的内容,并显然会更改检索的内容。
简而言之,您的爆炸功能将为您留下以下内容:
$year =
无论哪一年都在数据库中。可以是数字。
$month =
数据库中的任何月份。可以是数字。
$day =
其余的,包括日,小时,分钟,秒。绝对不是数字。
当您使用上述信息时(日期为字符串而不是数字),mktime()
将失败。
答案 1 :(得分:0)
如果替换
,脚本效果很好while($ ini!= $ fin)
使用此
while($ ini&lt; = $ fin)。
但我仍然建议您查看此链接Use DateTime, DateInterval and DatePeriod