解决oracle 与 php 周算法不同

来源:互联网 发布:网络基础知识 编辑:程序博客网 时间:2024/05/17 07:04


今天遇到了个小问题,项目要求在数据库里查出某一天上一周的数据列,sql语句还好写;

to_char("date",'ww') >:date

运行,测试。起初还好,几轮测试下来出问题了,总是有那么几天不正确,就是说手算是40周,这是查询时却不是,有可能是41,所以我查了下手册,原来php中给日期格式化是这样的

date("W")//当天是当年的第几周,注:每周是从星期一开始

但是在oracle周的解释是每周是从一月一日算起,所以显而易见会有些问题,所以为了解决我们就最好使他们保持一致,所以我写了下面的算法,跟大家分享下

function get_week_index($month=null, $day=null, $year=null){        //拿到某一天的月日年        $month =$month?$month: date("m");        $day =$day?$day:date("d");         $year  =$year?$year: date("Y");        //得到那一天的时间戳        $getDay = mktime(0, 0, 0, $month, $day, $year);        //得到差值        $dayMin =$getDay- mktime(0, 0, 0, 1, 1, $year);        //换算出是第几周        $dayR =(int) ($dayMin / (7*24*3600));         return ++$dayR;}