php strtotime引起的错误

今天需要统计上个月的一个数据,要获取上个月的开始时间和结束时间,本来想很简单

date("Y-m-01",strtotime("-1 month"));

一脸懵逼,后面就自己实现了这个功能

    $month = date('m');
    $year = date('Y');
    if ($month == '1') {
        $preMonth = '12';
        $preYear = $year - 1;
    }else{
        $preMonth = $month -1;
        $preYear = $year;
    }
    $startTime = date('Y-m-d 00:00:00', strtotime("{$preYear}-{$preMonth}-01"));
    $endTime = $preYear."-".$preMonth."-".date('t', strtotime($startTime))." 23:59:59";

后面查询文档知道,php5.3之后提供了一种方法专门针对这个问题的,用来获取每个月的第一天和最后一天。

echo date('Y-m-d H:i:s');
echo date('Y-m-d H:i:s', strtotime('first day of this month'));
echo date('Y-m-d H:i:s', strtotime('last day of this month'));
获取每个月的第一天和最后一天
strtotime例子
// 8月31日加一个月变成了10月
// PHP 加一个月变成了加两个月

php > echo date('Ym', strtotime('+1 months 2023-08-31'));
202310
php > echo date('Ym', strtotime('first day of +1 months 2023-08-31'));
202309

date ()
a: “am”或是”pm” 
A: “AM”或是”PM” 
d: 几日,两位数字,若不足则补零;从”01″至”31″ 
D: 星期几,3个英文字母,如:”Fri” 
F: 月份,英文全名,如:”January” 
h: 12小时制的小时,从”01″至”12″ 
H: 24小时制的小时,从”00″至”23″ 
g: 12小时制的小时,不补零;从”1″至”12″ 
G: 24小时制的小时,不补零;从”0″至”23″ 
j: 几日,不足不被零;从”1″至”31″ 
l: 星期几,英文全名,如:”Friday” 
m: 月份,两位数字,从”01″至”12″ 
n: 月份,两位数字,不补零;从”1″至”12″ 
M: 月份,3个英文字母;如:”Jan” 
s: 秒;从”00″至”59″ 
S: 字尾加英文序数,两个英文字母,如:”21th” 
t: 指定月份的天数,从”28″至”31″ 
U: 总秒数 
w: 数字型的星期几,从”0(星期天)”至”6(星期六)” 
Y: 年,四位数字 
y: 年,两位数字 
z: 一年中的第几天;从”1″至”366″

strtotime() 时间名词: 
年year 复数years 
月month 复数months 
周week 复数weeks 
日day 复数days 
时hour 复数hours 
分second 复数seconds 
秒minute 复数minutes 
上一个last 
下一个next 
一月January 
二月February 
三月March 
四月April 
五月May 
六月June 
七月July 
八月August 
九月September 
十月October 
十一月November 
十二月December

周一 Monday 周二 Tuesday 周三 Wednesday 周四 Thursday 周五 Friday 周六 Saturday 周天 Sunday

后面再网上找到了一篇文章, 讲解这个问题的 http://www.laruence.com/2018/07/31/3207.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注