用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3273|回复: 13
收起左侧

[模型] 学校教学周计算问题

[复制链接]
发表于 2017-8-6 17:35:53 | 显示全部楼层 |阅读模式
本人在开发学校用的OA系统,大家都知道学校使用的时间是教学周。
我在实现的时候使用以下函数(model)进行教学周的计算
PHP复制代码
 
        /* 计算 第几周星期几 是 某年某月某日 */
        public function get_datetime($week, $weekday) {
                $arr            = explode('-', $this->startdate());
    $year     = $arr[0];
    $month    = $arr[1];
    $day      = $arr[2];
    $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 周。
请问怎么到底哪里出了问题?应该怎么改进?
 楼主| 发表于 2017-8-13 13:49:18 | 显示全部楼层
Hex 发表于 2017-8-8 11:01
哦哦,没报错那就是算法有问题。。。

原因查明,我把model函数的一些结果var_dump显示
竟然发现
  1. $today = date("Y-m-s");
  2. var_dump($today);
复制代码

显示的是未来的日期,到时后续的操作mysql sql语句出错。
但是为啥 date() 函数会算错日期呢?
 楼主| 发表于 2017-8-7 12:16:02 | 显示全部楼层
Michael锐生 发表于 2017-8-7 10:50
你还不如直接贴错误,这个看起来没啥问题,还有$this->startdate()转时间戳方式为什么要用两种?另外如果是 ...

我什么都没有改动,就是按F5刷新浏览器,刷的密,就会出错。
$this->startdate()是返回当前学期的第一天的日期。
发表于 2017-8-21 10:27:14 | 显示全部楼层
oomengnan 发表于 2017-8-19 10:00
但是实际效果就是这样,
减少调用次数,就没出现问题了。可能是wampp套件发傻吧。 ...

。。。要相信科学,你这里肯定有深层次原因,有兴趣你可以查一查。
发表于 2017-8-7 10:50:04 | 显示全部楼层
你还不如直接贴错误,这个看起来没啥问题,还有$this->startdate()转时间戳方式为什么要用两种?另外如果是开学前两周,那-2也是没错的
发表于 2017-8-7 11:16:24 | 显示全部楼层
对,把 PHP 错误信息显示出来,然后贴出来才能知道为什么。
发表于 2017-8-7 13:23:17 | 显示全部楼层
oomengnan 发表于 2017-8-7 12:16
我什么都没有改动,就是按F5刷新浏览器,刷的密,就会出错。
$this->startdate()是返回当前学期的第一天 ...

错误是啥呢,贴出来看看啊~~
 楼主| 发表于 2017-8-8 09:46:29 | 显示全部楼层
Hex 发表于 2017-8-7 13:23
错误是啥呢,贴出来看看啊~~

好像没有明显报错,
例如我这个页面显示整个学期是8个教学周,
刷新页面一看有时候就变了20个教学周。
发表于 2017-8-8 11:01:26 | 显示全部楼层
oomengnan 发表于 2017-8-8 09:46
好像没有明显报错,
例如我这个页面显示整个学期是8个教学周,
刷新页面一看有时候就变了20个教学周。 ...

哦哦,没报错那就是算法有问题。。。
 楼主| 发表于 2017-8-13 14:53:52 | 显示全部楼层
Hex 发表于 2017-8-8 11:01
哦哦,没报错那就是算法有问题。。。

问题已经解决,我减少 date() 函数的调用次数,终于不再出现错误了。
发表于 2017-8-14 11:07:23 | 显示全部楼层
oomengnan 发表于 2017-8-13 14:53
问题已经解决,我减少 date() 函数的调用次数,终于不再出现错误了。

这个很奇怪,减少调用次数?你的时区设置正确了吗?

本版积分规则