php获取当前周的起止日期,使用PHP实现获取周的起始和结束日期

跨年过去了几天,有些程序在获取周的起始和结束日期时出现 BUG,导致很多统计出现错误。经过排查,发现是通过周和年两个参数获取周的起始和结束日期的方法有问题导致。需要弄明白这个问题,需要明白周是可以跨年的,比如 2015年的最后一周是第 53 周,日期是 2015 年的 12 月 28 日到 2016 年的 1 月 3 日。

所以当你使用 PHP 的 date 函数在 2016 年的 1 月 1 日获取周时,返回的值是 53,返回的年是 2016。如果没有弄清楚概念,还会以为是 2016 年的第 53 周呢。所以周和年是没有什么特别的关系的。写时间的转换函数,首先一定是通过时间戳。下面的实现不是太完美,但是选择了某人的生日作为一个参照点来计算。我一直以为这样功能的函数其实真的不需要传参数,所以两个参数都是可选的。代码如下:function get_week_dates($week = '', $year = ''){

if(!$week){

$week = date('W');

}

if(!$year){

$year = date('Y');

}

if ($week == date('W') && $year == date('Y')) {

$witchDay = date('w'); // 0 - 6

if ($witchDay == 0) {

$witchDay = 7; // 周日

}

$pastDays = $witchDay - 1;

$today_timestamp = strtotime('today');

$startOfWeek = $today_timestamp - $pastDays * 86400;

} else {

$timestamp0210 = strtotime($year.'-02-10');

$weekOfYear = date('W', $timestamp0210);

$dayOfWeek = date('w', $timestamp0210);

if ($dayOfWeek == 0) {

$dayOfWeek = 7;

}

$timestampOfWeek = $timestamp0210 - 86400 * ($dayOfWeek - 1);

$timestampDistance = ($weekOfYear - $week) * 86400 * 7;

$startOfWeek = $timestampOfWeek - $timestampDistance;

}

$endOfWeek = $startOfWeek + 86400 * 6;

$startDateOfWeek = date('Y-m-d', $startOfWeek);

$endDateOfWeek = date('Y-m-d', $endOfWeek);

return array($startDateOfWeek, $endDateOfWeek);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值