计算两个时间中的每个周的开始时间和开始时间
场景
中文描述
【计算两个时间中的每个周的开始时间和结束时间】计算两个时间中的每个周的开始时间和开始时间
代码示例
计算两个时间中的每个周的开始时间和结束时间
//计算周
private function _week($sDate, $eDate)
{
$range_arr = array();
// 检查日期有效性
$this->check_date(array($sDate, $eDate));
// 计算各个周的起始时间
do {
$range= [];
$weekInfo= $this->get_weekInfo_by_date($sDate);
$end_day= $weekInfo['week_end_day'];
$start= $this->substr_date($weekInfo['week_start_day']);
$end= $this->substr_date($weekInfo['week_end_day']);
$range["start"]= $start;
$range["end"]= $end;
$range["current"] = date("Y-m", strtotime($start));
$range["week"]= date("W", strtotime($start));
$range_arr[]= $range;
$sDate= date('Y-m-d', strtotime($sDate) + 7 * 86400);
} while ($end_day < $eDate);
return $range_arr;
}/**
* 截取日期中的月份和日
* @param string $date
* @return string $date
*/
private function substr_date($date)
{
if (!$date) return false;
return date('Y-m-d', strtotime($date));
}/**
* 根据指定日期获取所在周的起始时间和结束时间
*/
private function get_weekInfo_by_date($date)
{
$idx= strftime("%u", strtotime($date));
$mon_idx = $idx - 1;
$sun_idx = $idx - 7;
return array(
'week_start_day' => strftime('%Y-%m-%d', strtotime($date) - $mon_idx * 86400),
'week_end_day'=> strftime('%Y-%m-%d', strtotime($date) - $sun_idx * 86400),
);
}/**
* 检查日期的有效性 YYYY-mm-dd
* @param array $date_arr
* @return bool
*/
private function check_date($date_arr)
{
$invalid_date_arr = array();
foreach ($date_arr as $row) {
$timestamp = strtotime($row);
$standard= date('Y-m-d', $timestamp);
if ($standard != $row) $invalid_date_arr[] = $row;
}
if (!empty($invalid_date_arr)) {
return false;
}
return true;
}
推荐阅读
- 对GO切片的理解
- 小程序商城网站开发秒杀模块篇
- 盲盒购物网站系统开发建设 第三篇
- Netty核心概念之ChannelHandler&Pipeline&ChannelHandlerContext
- 简单的线程池实现多线程对大文件的读取
- SSH 端口转发与 SOCKS 代理
- Ubuntu16.04/Scala2.11.8安装教程
- 学习PHP中的高精度计时器HRTime扩展
- 使用OpenResty+Lua实现灰度测试(金丝雀)
- 使用源码编译安装PHP扩展