为了账号安全,请及时绑定邮箱和手机立即绑定

PHP dateTime 上个月的 12 月 31 日是错误的

PHP dateTime 上个月的 12 月 31 日是错误的

PHP
呼唤远方 2022-07-16 18:13:48
我有这个:$previousMonth = new DateTime('2019-12-31'); $previousMonth->modify('-1 month');我的理解是“-1 月”应该修改对象,无论该月有多少天,还是?当然,我应该得到或期望得到的是 11 月底(2019-11-30),但我得到的是 12 月初(同月)。顺便说一句,如果我将日期更改为“2019-12-30”(前一天),那么它将是 11 月底。如果我最初的假设不正确,那么可靠计算上个月的最佳替代方案是什么?有什么想法吗?
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

在 php 中获取最后一个月的最简单和最简单的方法是

$previousMonth = date("Y-n-j", strtotime("last day of previous month"));

与其他线程上建议的相同在 php 中获取上个月的日期


查看完整回答
反对 回复 2022-07-16
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

$date = "2019-12-31 00:00:00";
echo date('Y-m-d', strtotime($date . '-1month'));

这将打印出 2019-12-01,因为 31/11 不存在。

以下内容不能回答您的问题,但将来可能会有所帮助。我喜欢在处理日期时使用 Carbon。你的问题可以很简单地解决。

https://carbon.nesbot.com/

它功能多,使用极其简单,可以用 Composer 安装。


查看完整回答
反对 回复 2022-07-16
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

要获取上个月的最后一天,您可以获取当月的第一天并减去 1 秒或 1 天:


$previousMonth = new DateTime('2019-12-31');

$previousMonth->modify($previousMonth->format('Y-m-01')); // date is 2019-12-01 00:00:00

$previousMonth->modify('-1 sec');

echo $previousMonth->format('Y-m-d H:i:s') . PHP_EOL; // Outputs 2019-11-30 23:59:59


$previousMonth->modify('+1 sec'); // set back the original date 2019-12-01 00:00:00

$previousMonth->modify('-1 day');

echo $previousMonth->format('Y-m-d H:i:s'); // Outputs 2019-11-30 00:00:00


查看完整回答
反对 回复 2022-07-16
  • 3 回答
  • 0 关注
  • 298 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号