背景
項(xiàng)目中有遇到一些業(yè)務(wù)是以周為單位的,比如周一0點(diǎn)進(jìn)行某些結(jié)算排名之類的。這時(shí)候就需要獲取周一0點(diǎn)的時(shí)間戳進(jìn)行數(shù)據(jù)的分割拆分統(tǒng)計(jì)等操作,然而獲取本周一0點(diǎn)的時(shí)間戳 PHP 并沒有提供原生函數(shù) 。
傳統(tǒng)方法
判斷今天是星期幾,然后根據(jù)周一應(yīng)該跟今天相差的時(shí)間算出周一0點(diǎn)的時(shí)間。
//獲取本周一
public static function onMonday($type)
{
$weekday = date('w');
if ($weekday == 0) {
$weekday = 7;
}
$weekday = $weekday - 1;
if ($type == 1) {
return date("Ymd", strtotime("- {$weekday} days"));
} else {
return strtotime(date("Ymd", strtotime("- {$weekday} days")));
}
}
捷徑
偶然一次發(fā)現(xiàn),strtotime('next Monday') 總是會(huì)返回下一周的周一的時(shí)間,無論當(dāng)前時(shí)間是星期幾。這與 strtotime('this Monday') 抑或 strtotime('last Monday') 都不一樣。
$thisMonday = strtotime('next Monday') - 60*60*24*7;