通过年份和周数返回开始时间和结束时间
/**
* @param int $year 要计算日期的年份
* @param int $week 要计算的周数
* @return bool 返回周开始和结束时间的时间戳和格式化日期
*/
protected function getWeekStartAndEndDate($year, $week = 1)
{
$year = (int)$year;
$week = (int)$week;
//按给定的年份计算本年周总数
$date = new \DateTime();
$date->setISODate($year, 53);
$weeks = max($date->format("W"), 52);
//如果给定的周数大于周总数或小于等于0
if ($week > $weeks || $week <= 0) {
return false;
}
//如果周数小于10
if ($week < 10) {
$week = '0' . $week;
}
//当周起止时间戳
$timeYmd['start_tamp'] = strtotime($year . 'W' . $week);
$timeYmd['end_tamp'] = strtotime('+1 week -1 day', $timeYmd['start_tamp']);
//当周起止日期
$timeYmd['start'] = date("Y-m-d", $timeYmd['start_tamp']);
$timeYmd['end'] = date("Y-m-d", $timeYmd['end_tamp']);
//返回日期形式
return $timeYmd;
}
如果想求出当前周数或者几周前(后)的周数,可以使用如下方法
date('W', time()); // 当前周数
date('W', time()) - 2; // 两周以前的周数
date('W', time()) + 3; // 三周以后的周数
求上个月, 三个月后的第一天
/**
* @param string $m 偏移的月数
* @return false|string 要计算的日期
*/
public function calculationDateTime($m = '0')
{
$tmp_date = date("Ym");
//切割出年份
$tmp_year = substr($tmp_date, 0, 4);
//切割出月份
$tmp_mon = substr($tmp_date, 4, 2);
return date('Y-m-1 00:00:00', $month = mktime(0, 0, 0, $tmp_mon + (int)$m, 1, $tmp_year));
}
这里求的是整月的第一天.
如:今天是2017-05-03, 求上个月的第一天就是
calculationDateTime(-1); // 返回: 2017-04-01 00:00:00
求三个月后的第一天就是
calculationDateTime(3); // 返回: 2017-08-01 00:00:00
求当月第一天就是
calculationDateTime(); //返回 2017-05-01 00:00:00