学校教学周计算问题
本人在开发学校用的OA系统,大家都知道学校使用的时间是教学周。我在实现的时候使用以下函数(model)进行教学周的计算
/* 计算 第几周星期几 是 某年某月某日 */
public function get_datetime($week, $weekday) {
$arr = explode('-', $this->startdate());
$year = $arr;
$month = $arr;
$day = $arr;
$unixtime = mktime(0,0,0,$month,$day,$year)+(($week-1)*7+$weekday)*86400;
return date('Y-m-d',$unixtime);
}
/* 计算 某年某月某日 是 开学第几天 */
private function get_schooldays($date = NULL) {
if (is_null($date)) {
$date = $this->enddate();
}
$startdate = $this->startdate();
$start = strtotime($startdate);
$end = strtotime($date);
$days= round(($end-$start)/3600/24);
return $days;
}
/* 计算 某年某月某日 是 第几教学周 */
public function get_schoolweek($date = NULL) {
return intval($this->get_schooldays($date)/7) + 1;
}
我使用的平台是 win7 + wamp 套件。
现在的问题是,上述函数能够准确计算教学周,但是不稳定,有时候刷新页面会显示PHP报错或者是 -2 周。
请问怎么到底哪里出了问题?应该怎么改进?
Hex 发表于 2017-8-8 11:01
哦哦,没报错那就是算法有问题。。。
原因查明,我把model函数的一些结果var_dump显示
竟然发现
$today = date("Y-m-s");
var_dump($today);
显示的是未来的日期,到时后续的操作mysql sql语句出错。
但是为啥 date() 函数会算错日期呢? Michael锐生 发表于 2017-8-7 10:50
你还不如直接贴错误,这个看起来没啥问题,还有$this->startdate()转时间戳方式为什么要用两种?另外如果是 ...
我什么都没有改动,就是按F5刷新浏览器,刷的密,就会出错。
$this->startdate()是返回当前学期的第一天的日期。 oomengnan 发表于 2017-8-19 10:00
但是实际效果就是这样,
减少调用次数,就没出现问题了。可能是wampp套件发傻吧。 ...
。。。要相信科学,你这里肯定有深层次原因,有兴趣你可以查一查。 你还不如直接贴错误,这个看起来没啥问题,还有$this->startdate()转时间戳方式为什么要用两种?另外如果是开学前两周,那-2也是没错的 对,把 PHP 错误信息显示出来,然后贴出来才能知道为什么。 oomengnan 发表于 2017-8-7 12:16
我什么都没有改动,就是按F5刷新浏览器,刷的密,就会出错。
$this->startdate()是返回当前学期的第一天 ...
错误是啥呢,贴出来看看啊~~ Hex 发表于 2017-8-7 13:23
错误是啥呢,贴出来看看啊~~
好像没有明显报错,
例如我这个页面显示整个学期是8个教学周,
刷新页面一看有时候就变了20个教学周。 oomengnan 发表于 2017-8-8 09:46
好像没有明显报错,
例如我这个页面显示整个学期是8个教学周,
刷新页面一看有时候就变了20个教学周。 ...
哦哦,没报错那就是算法有问题。。。 Hex 发表于 2017-8-8 11:01
哦哦,没报错那就是算法有问题。。。
问题已经解决,我减少 date() 函数的调用次数,终于不再出现错误了。 oomengnan 发表于 2017-8-13 14:53
问题已经解决,我减少 date() 函数的调用次数,终于不再出现错误了。
这个很奇怪,减少调用次数?你的时区设置正确了吗?
页:
[1]
2