PHP学习笔记之时间strtotime
刚开始是这样写的(时间区间):
/**
* 获取查询条件的日期区间
* @param $date_flag
* @return array
*/
public static function conditionDate($date_flag)
{
$time = time();
$start_date = '';
$end_date = '';
//今天
if ($date_flag === 'today') {
$start_date = date('Y-m-d', $time);
$end_date = date('Y-m-d', strtotime($start_date) + 86400);
}
//昨天
if ($date_flag === 'yesterday') {
$end_date = date('Y-m-d', $time);
$start_date = date('Y-m-d', strtotime($end_date) - 86400);
}
//本周
if ($date_flag === 'week') {
$week = date('N');
$end_date = date('Y-m-d', strtotime(date('Y-m-d', $time)) + 86400);
$start_date = date('Y-m-d', strtotime($end_date) - 86400 * $week);
}
//本月
if ($date_flag === 'month') {
$start_date = date('Y-m-01', time());
$end_date = date('Y-m-d', strtotime(date('Y-m-d', $time)) + 86400);//本月就是明天截止的日期了
//$thisMonthDays = date('t',$time); //指定时间月的天数
//$end_date = date('Y-m-d', strtotime($start_date) + 86400*$thisMonthDays);
}
return ['start'=>$start_date, 'end'=>$end_date];
}
//给定月份的天数
echo date('t',strtotime('2022-02-20'));
echo "\n\n";
echo date('Y-m-d H:i:s',strtotime('tomorrow'));
echo "\n\n";
echo date('Y-m-d H:i:s',strtotime('yesterday'));
echo "\n\n";
// 获取当天开始时间
echo date('Y-m-d H:i:s',strtotime(date('Y-m-d')));
echo "\n";
// 获取当天结束时间
echo date('Y-m-d H:i:s',strtotime(date('Y-m-d'))+86400-1);
echo "\n";
//后去最近7天
echo date('Y-m-d H:i:s',strtotime("-7 day"));
echo "\n";
// 获取某个月的第一天,获取某个月的最后一天
echo date('Y-m-d H:i:s',strtotime(date('Y-m-0'))+1);
echo "\n";
都是用86400来算,上面笔记个性化的是本周开始的时间,本月开始时间,其实拿到这些有跟简单的方法
可以参考 http://www.caizhichao.cn/738.html ,说得很详细了。
================
+1 month 解释相隔天数可能28,30、31天的情况
$date = "2022-01-31 00:00:00";//2022-03-03 00:00:00 相隔31天
//$date = "2022-04-01 00:00:00";//2022-05-01 00:00:00 相隔30天
//$date = "2022-02-02 00:00:00";
//$date = "2022-02-01 00:00:00";//2022-03-01 00:00:00 相隔28天
//$date = "2022-02-28 00:00:00";
//$date = "2022-01-01 00:00:00";//2022-01-02 00:00:00 相隔31天
echo $date."\n";
$nextMonthDay = date('Y-m-d H:i:s',strtotime('+1 month',strtotime($date)));
echo $nextMonthDay."\n";
// 是根据当前时间+当前时间的当月天数*86400,得到下个月的时间。
// 这就能够解释间隔28天,30天,31天的情况