php 本周开始时间和结束时间;本月开始时间结束时间;上月开始时间结束时间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | <?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--; } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步