zoukankan      html  css  js  c++  java
  • PHP时间日期操作

     1 date_default_timezone_set('PRC'); //默认时区 
     2 //当前的时间增加5天
     3 $date1 = "2014-11-11";
     4 echo date('Y-m-d',strtotime("$date1 +5 day"));  //输出结果:2014-11-16
     5 //相应地,要增加月,年,将day改成month或year即可
     6  
     7  
     8 //+++ 今天、昨天、明天 、上一周、下一周 +++++++++
     9 echo "今天:",date("Y-m-d",time()),"<hr>"; 
    10 echo "昨天:",date("Y-m-d",strtotime("-1 day")), "<hr>"; 
    11 echo "明天:",date("Y-m-d",strtotime("+1 day")), "<hr>"; 
    12 echo "一周后:",date("Y-m-d",strtotime("+1 week")), "<hr>"; 
    13 echo "一周零两天四小时两秒后:",date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "<hr>"; 
    14 echo "下个星期四:",date("Y-m-d",strtotime("next Thursday")), "<hr>"; 
    15 echo "上个周一:".date("Y-m-d",strtotime("last Monday"))."<hr>"; 
    16 echo "一个月前:".date("Y-m-d",strtotime("last month"))."<hr>"; 
    17 echo "一个月后:".date("Y-m-d",strtotime("+1 month"))."<hr>"; 
    18 echo "十年后:".date("Y-m-d",strtotime("+10 year"))."<hr>"; 
     1 **
     2 * 功能:取得给定日期所在周的开始日期和结束日期
     3 * 参数:$gdate 日期,默认为当天,格式:YYYY-MM-DD
     4 * $first 一周以星期一还是星期天开始,0为星期天,1为星期一
     5 * 返回:数组array("开始日期", "结束日期");
     6 * 
     7 */
     8  
     9 function aweek($gdate = "", $first = 0){
    10     if(!$gdate) $gdate = date("Y-m-d");
    11     $w = date("w", strtotime($gdate));//取得一周的第几天,星期天开始0-6
    12     $dn = $w ? $w - $first : 6;//要减去的天数
    13     //本周开始日期
    14     $st = date("Y-m-d", strtotime("$gdate -".$dn." days"));
    15     //本周结束日期
    16     $en = date("Y-m-d", strtotime("$st +6 days"));
    17     //上周开始日期
    18     $last_st = date('Y-m-d',strtotime("$st - 7 days"));
    19     //上周结束日期
    20     $last_en = date('Y-m-d',strtotime("$st - 1 days"));
    21     return array($st, $en,$last_st,$last_en);//返回开始和结束日期
    22 }
    23  
    24 echo implode("|", aweek("", 1)).'<br />';
    25 //echo date("Y-m-d",strtotime("time()"));
    26 echo '本周第一天(星期日为一周开始):'.date('Y-m-d', time()-86400*date('w')).'<hr>';
    27 echo '本周第一天(星期一为一周开始):'.date('Y-m-d', time()-86400*date('w')+(date('w')>0?86400:-6*86400)).'<hr>';
    28 echo '本月第一天:'.date('Y-m-d', mktime(0,0,0,date('m'),1,date('Y'))).'<hr>';
    29 echo '本月最后一天:'.date('Y-m-d', mktime(0,0,0,date('m'),date('t'),date('Y'))).'<hr>';
    30 //上个月的开始日期
    31 $m = date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y')));
    32 //上个月共多少天
    33 $t = date('t',strtotime("$m"));
    34 echo '上月第一天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y'))).'<hr>';
    35 echo '上月最后一天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,$t,date('Y'))).'<hr>';

    ====================================

     1 //PHP手册上有一个这个方法,用来返回指定日期的周一和周日
     2 function get_week_range($week, $year){
     3     $timestamp = mktime(1,0,0,1,1,$year);
     4     $firstday = date("N",$timestamp);
     5     if($firstday >4){
     6         $firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);
     7     }else{
     8         $firstweek = strtotime('-'.($firstday-1).' days', $timestamp);
     9     }
    10     $monday = strtotime('+'.($week - 1).' week', $firstweek);
    11     $sunday = strtotime('+6 days', $monday);
    12  
    13     $start = date("Y-m-d", $monday);
    14     $end = date("Y-m-d", $sunday);
    15  
    16     return array($start, $end);
    17 }
    18  
    19 //strtotime获取本周第一天和最后一天方法的BUG
    20  
    21 //PHP手册上有一个这个方法,用来返回指定日期的周一和周日
    22  
    23 function get_week_range2($week, $year){
    24     $timestamp = mktime(1,0,0,1,1,$year);
    25     $firstday = date("N",$timestamp);
    26     if($firstday >4){
    27         $firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);
    28     }else{
    29         $firstweek = strtotime('-'.($firstday-1).' days', $timestamp);
    30     }
    31     $monday = strtotime('+'.($week - 1).' week', $firstweek);
    32     $sunday = strtotime('+6 days', $monday);
    33  
    34     $start = date("Y-m-d", $monday);
    35     $end = date("Y-m-d", $sunday);
    36  
    37     return array($start, $end);
    38 }

    但在跨年的时候使用会有问题
    例如2011年的12月31日周六和2012年1月1日周日,拿到的周一和周日完全不同
    2011年12月31日拿合到的周一和周日分别对应
    2011-12-26
    2012-01-01

    但2012年1月1日拿 到的周一和周日分别对应
    2012-01-02
    2012-01-04

    原因为传进去的方法的周为第53周,但是年为2011年,所以认为2011的第53周,所以计算有误,解决方法为,
    如果周为大于10(因为一月个月不可能有10周),且月份为1的时候,将年减1处理

    1 if(date('m',$last_week_time) == '01' and $tmp_last_week > 10){
    2     $last_week_year--;
    3 }
  • 相关阅读:
    优化SQL查询:如何写出高性能SQL语句
    提高SQL执行效率的16种方法
    Spring Ioc DI 原理
    java内存泄漏
    转:js闭包
    LeetCode Best Time to Buy and Sell Stock III
    LeetCode Best Time to Buy and Sell Stock with Cooldown
    LeetCode Length of Longest Fibonacci Subsequence
    LeetCode Divisor Game
    LeetCode Sum of Even Numbers After Queries
  • 原文地址:https://www.cnblogs.com/jghdream/p/4815312.html
Copyright © 2011-2022 走看看