通過年份和周數(shù)返回開始時(shí)間和結(jié)束時(shí)間
/**
* @param int $year 要計(jì)算日期的年份
* @param int $week 要計(jì)算的周數(shù)
* @return bool 返回周開始和結(jié)束時(shí)間的時(shí)間戳和格式化日期
*/
protected function getWeekStartAndEndDate($year, $week = 1)
{
$year = (int)$year;
$week = (int)$week;
//按給定的年份計(jì)算本年周總數(shù)
$date = new \DateTime();
$date->setISODate($year, 53);
$weeks = max($date->format("W"), 52);
//如果給定的周數(shù)大于周總數(shù)或小于等于0
if ($week > $weeks || $week <= 0) {
return false;
}
//如果周數(shù)小于10
if ($week < 10) {
$week = '0' . $week;
}
//當(dāng)周起止時(shí)間戳
$timeYmd['start_tamp'] = strtotime($year . 'W' . $week);
$timeYmd['end_tamp'] = strtotime('+1 week -1 day', $timeYmd['start_tamp']);
//當(dāng)周起止日期
$timeYmd['start'] = date("Y-m-d", $timeYmd['start_tamp']);
$timeYmd['end'] = date("Y-m-d", $timeYmd['end_tamp']);
//返回日期形式
return $timeYmd;
}
如果想求出當(dāng)前周數(shù)或者幾周前(后)的周數(shù),可以使用如下方法
date('W', time()); // 當(dāng)前周數(shù)
date('W', time()) - 2; // 兩周以前的周數(shù)
date('W', time()) + 3; // 三周以后的周數(shù)
求上個(gè)月, 三個(gè)月后的第一天
/**
* @param string $m 偏移的月數(shù)
* @return false|string 要計(jì)算的日期
*/
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, 求上個(gè)月的第一天就是
calculationDateTime(-1); // 返回: 2017-04-01 00:00:00
求三個(gè)月后的第一天就是
calculationDateTime(3); // 返回: 2017-08-01 00:00:00
求當(dāng)月第一天就是
calculationDateTime(); //返回 2017-05-01 00:00:00