zoukankan      html  css  js  c++  java
  • php 本周开始时间和结束时间;本月开始时间结束时间;上月开始时间结束时间

    <?php
    
    /**
    
     * 功能:取得给定日期所在周的开始日期和结束日期
    
     * 参数:$gdate 日期,默认为当天,格式:YYYY-MM-DD
    
     *      $first 一周以星期一还是星期天开始,0为星期天,1为星期一
    
     * 返回:数组array("开始日期", "结束日期");
    
     * 
    
     */
    
    function aweek($gdate = "", $first = 0){
    
     if(!$gdate) $gdate = date("Y-m-d");
    
     $w = date("w", strtotime($gdate));//取得一周的第几天,星期天开始0-6
    
     $dn = $w ? $w - $first : 6;//要减去的天数
    
     //本周开始日期
    
     $st = date("Y-m-d", strtotime("$gdate -".$dn." days"));
    
     //本周结束日期
    
     $en = date("Y-m-d", strtotime("$st +6 days"));
    
     //上周开始日期
    
     $last_st = date('Y-m-d',strtotime("$st - 7 days"));
    
     //上周结束日期
    
     $last_en = date('Y-m-d',strtotime("$st - 1 days"));
    
     return array($st, $en,$last_st,$last_en);//返回开始和结束日期
    
    }
    
    echo implode("|", aweek("", 1)).'<br />';
    
    //echo date("Y-m-d",strtotime("time()"));
    
    echo '本周第一天(星期日为一周开始):'.date('Y-m-d', time()-86400*date('w')).'<br/>';
    
    echo '本周第一天(星期一为一周开始):'.date('Y-m-d', time()-86400*date('w')+(date('w')>0?86400:-6*86400)).'<br/>';
    
    echo '本月第一天:'.date('Y-m-d', mktime(0,0,0,date('m'),1,date('Y'))).'<br/>';
    
    echo '本月最后一天:'.date('Y-m-d', mktime(0,0,0,date('m'),date('t'),date('Y'))).'<br/>';
    
    //上个月的开始日期
    
    $m = date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y')));
    
    //上个月共多少天
    
    $t = date('t',strtotime("$m"));
    
    echo '上月第一天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y'))).'<br/>';
    
    echo '上月最后一天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,$t,date('Y'))).'<br/>';
    
    ?>
    
    PHP手册上有一个这个方法,用来返回指定日期的周一和周日
    
    <?php
    function get_week_range($week, $year)
    {
        $timestamp = mktime(1,0,0,1,1,$year);
        $firstday = date("N",$timestamp);
        if($firstday >4)
            $firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);
        else
            $firstweek = strtotime('-'.($firstday-1).' days', $timestamp);
        
        $monday = strtotime('+'.($week - 1).' week', $firstweek);
        $sunday = strtotime('+6 days', $monday);
        
        $start = date("Y-m-d", $monday);
        $end   = date("Y-m-d", $sunday);
        
        return array($start, $end);
    }
    ?>
    
    strtotime获取本周第一天和最后一天方法的BUG
    
    PHP手册上有一个这个方法,用来返回指定日期的周一和周日
    
    <?php
    function get_week_range($week, $year)
    {
        $timestamp = mktime(1,0,0,1,1,$year);
        $firstday = date("N",$timestamp);
        if($firstday >4)
            $firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);
        else
            $firstweek = strtotime('-'.($firstday-1).' days', $timestamp);
        
        $monday = strtotime('+'.($week - 1).' week', $firstweek);
        $sunday = strtotime('+6 days', $monday);
        
        $start = date("Y-m-d", $monday);
        $end   = date("Y-m-d", $sunday);
        
        return array($start, $end);
    }
    ?>
    
    但在跨年的时候使用会有问题
    
    例如2009年的12月31日周四和2010年1月1日周五周拿到的周一和周日完全不同
    
    2009年12月31日拿合到的周一和周日分别对应
    
    2009-12-28
    2010-01-03
    
    但2010年1月1日拿 到的周一和周日分别对应
    
    2011-01-03
    2011-01-09
    
    原因为传进去的方法的周为第53周,但是年为2010年,所以认为2010的第53周,所以计算有误,解决方法为,如果周为大于10(因为一月个月不可能有10周),且月份为1的时候,将年减1处理
    
    if(date('m',$last_week_time) == '01' and $tmp_last_week > 10)
    {
     $last_week_year--;
    }
    

      

  • 相关阅读:
    HDU 5313 bitset优化背包
    bzoj 2595 斯坦纳树
    COJ 1287 求匹配串在模式串中出现的次数
    HDU 5381 The sum of gcd
    POJ 1739
    HDU 3377 插头dp
    HDU 1693 二进制表示的简单插头dp
    HDU 5353
    URAL 1519 基础插头DP
    UVA 10294 等价类计数
  • 原文地址:https://www.cnblogs.com/jthb/p/4489306.html
Copyright © 2011-2022 走看看