日期时间修改函数跳过二月

2023-12-13

当添加一个月时DateTime::modify方法,结果跳过二月。

  • 为什么不输出2020-02-31?
  • 如何输出2020-02-29使用日期时间? (该月的最后一天)。
$date = new DateTime("2020-01-31");
echo $date->modify("+1 month")->format("Y-m-d"); // 2020-03-02

PHP DateTime::modify("+n month")在当天基础上添加 28 到 31 天,具体取决于月份和年份。

Solution

我建议您使用以下方法从该月的第一天开始增加月份modify and format方法:

// Instanciates the DateTime object.
$date = new DateTime("2020-01-01");

// Adds a month to the date.
$date->modify("+1 month"); // 2020-02-01

// Format the date with "t" (gets the last day of the month).
$date->format("Y-m-t"); // 2020-02-29

从该月的第一天开始递增never提高二月问题这是相当常见的,认为 PHP DateTime 会智能地添加一个月2020-02-29和输出2020-03-31.

为什么会发生这种情况?

In the 公历, the 平均一个月的长度是 30.436875 天:

  • 4月、6月、9月、11月30天;
  • 一月、三月、五月、七月、八月、十月、十二月共31天;
  • 28天或29天(在闰年) 二月里。

PHP 会将给定月份的确切天数添加到当前日期。

因此,如果您从第一个增量开始递增,PHP 将在第一次增量后调整日期 该月的最后一天。

E.g.:

让我们从 3 月的最后一天(31 日)开始添加一个月。

由于当前月份(3 月)有 31 天,PHP 将增加 31 天到该日期。添加 31 天2020-03-31将导致跳过整个四月。

$date = new DateTime("2020-03-31");              // 2020-03-31
echo $date->modify("+1 month")->format("Y-m-d"); // 2020-05-01 | Added 31 days (since March has 31 days).
echo $date->modify("+1 month")->format("Y-m-d"); // 2020-06-01 | Added 31 days (since the new date is May 1st, which is a month with 31 days).
echo $date->modify("+1 month")->format("Y-m-d"); // 2020-07-01 | Added 30 days

现在,我们在 4 月的最后一天(30 日)添加一个月。

我们可以看到,由于接下来的几个月都有 30 多天,最后一天将保持不变,直到第二年2月。由于 2 月总是有 28 到 29 天,因此加上 31 天就过了这个月,结果日期就是 3 月 2 日。

$date = new DateTime("2020-04-30");
echo $date->modify("+1 month")->format("Y-m-d"); // 2020-05-30 | Added 30 days.
echo $date->modify("+1 month")->format("Y-m-d"); // 2020-06-30 | Added 31 days.
echo $date->modify("+1 month")->format("Y-m-d"); // 2020-07-30 | Added 30 days.
// ...
echo $date->modify("+1 month")->format("Y-m-d"); // 2021-01-30 | Added 31 days
echo $date->modify("+1 month")->format("Y-m-d"); // 2021-03-02 | Added 31 days (since January has 31 days).
echo $date->modify("+1 month")->format("Y-m-d"); // 2021-04-02 | Added 31 days (since the new date is March 2nd, which is a month with 31 days).

这就是为什么建议从该月的第一天开始增加月份, 自从1st对所有月份都是通用的。

$date = new DateTime("2020-01-01");              // 2020-01-01
echo $date->modify("+1 month")->format("Y-m-d"); // 2020-02-01 | Added 31 days
echo $date->modify("+1 month")->format("Y-m-d"); // 2020-03-01 | Added 29 days (since 2020 is leap year, yee haw).
echo $date->modify("+1 month")->format("Y-m-d"); // 2020-04-01 | Added 31 days
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

日期时间修改函数跳过二月 的相关文章

  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛
  • 搜索引擎如何找到相关内容? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google 在解析网络时如何找到相关内容 例如 Google 使用 PHP 原生 DOM 库来解析内
  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • 优雅地处理没有数据的 amcharts

    我想知道我的 dataProvider 是否为空 amCharts绘制时默认为null 我怎样才能动态地处理它 var chart AmCharts makeChart chartdiv theme none type serial dat
  • 单词之间没有空格的语言(例如亚洲语言)中的断词?

    我想让 MySQL 全文搜索适用于日语和中文文本以及任何其他语言 问题在于这些语言以及可能其他语言通常在单词之间没有空格 当您必须键入与文本中相同的句子时 搜索没有用 我不能只在每个字符之间添加空格 因为英语也必须有效 我想用 PHP 或
  • 用于获取下周一(或一周中的任何一天)的日期的 Ruby 代码

    给定一个输入 例如 day Monday 我如何计算下一次的日期day def date of next day end require date def date of next day date Date parse day delta
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • 生成大随机数 php [重复]

    这个问题在这里已经有答案了 我想使用 PHP 生成一个包含 75 个字符的数字 我到处寻找 但一无所获 除了这个 http dailycoding com tools RandomNumber aspx http dailycoding c
  • FPDI/FPDF:水印和打印多页

    我修改了这个堆栈问题 当用户尝试下载文件时在 pdf 文件上应用水印 https stackoverflow com questions 3983432 applying watermarks on pdf files when users
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 如何使用 php 发送服务器错误响应?

    一旦用户点击删除按钮我的 jQuery 脚本要求服务器删除所选项目 现在我想要我的php发送成功或错误响应的脚本 是否有可能触发错误回调万一该项目无法删除 Thanks 我的 jQuery 代码 ajax type post url myA
  • 如何使用 php 下载/打印页面的特定部分

    我有一个 HTML 页面如下 Lorem Ipsum is simply dummy text of the printing and typesetting industry Lorem Ipsum has been the indust
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • 使用 preg_replace 仅替换第一个匹配项

    我有一个结构类似于以下的字符串 aba aaa cba sbd dga gad aaa cbz 该字符串每次都可能有点不同 因为它来自外部源 我只想替换第一次出现的 aaa 但其他人则不然 是否可以 可选的第四个参数预替换 http php
  • 交换关联数组中的两个项目

    Example arr array apple gt sweet grapefruit gt bitter pear gt tasty banana gt yellow 我想调换一下柚子和梨的位置 这样数组就变成了 arr array ap
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • 在 apache docker 容器中运行虚拟主机

    我在同一个 apache 容器中有两个 php 应用程序 我试图在端口上运行其中一个应用程序 因为它需要通过根域而不是子文件夹进行访问 我想在端口 8060 上运行应用程序 我尝试使用 apache 虚拟主机执行此操作 但它不会加载页面 h
  • 如果循环中内存超出,我可以在 for 循环中抛出异常吗?

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何处理 foreach 循环中发生
  • 使用正则表达式提取两个短语之间的所有单词[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下正则表达式提取两个短语之间的所有单词 b item W w W 0 2 1 one W w W 0 3 business b b item W w W 0 2 3 three W w W 0 3
  • 如何在 Laravel 中使用 PUT http 动词提交表单

    我知道这个问题可能已经提出 但我就是无法让它发挥作用 如果有人可以帮助我 我将非常感激 我安装了 colletive form 但答案也可以是 html 表单标签 现在列出我的表格 我的路线和我的例外情况 Form model array

随机推荐

  • Javascript - 替换“%20”空格

    var loc array document location href split var linkElement document getElementById waBackButton var newT document create
  • 仅当按下特定按钮时才进行淘汰验证

    https github com ericmbarnard Knockout Validation wiki Native Rules 我在 MCV3 页面上使用淘汰验证 我的情况是我有两个按钮 一是添加到收藏 二是保存 添加到集合会根据需
  • 使用 xcode 4 实施适用于 iPhone 的 Facebook Connect

    我在使用 Facebook Connect 时遇到问题 我 尝试 遵循位于http www mobisoftinfotech com blog iphone iphone fbconnect facebook connect tutoria
  • 项目从 Knockout 可观察数组中删除,但未从 html 表中删除

    我有一个问题可以说明我的问题 http plnkr co edit PzBrcTX0Vnn01xWy4dk6 这是一个包含 设置 列表的表 它使用 Footable 以便可以对列表进行排序以及 Footable 的其他功能 场景1 运行 按
  • R 打包中的 inst 和 extdata 文件夹

    在文档中 R 建议将原始数据文件 不是 Rdata 或 Rda 放置在inst extdata 从第一段开始 http cran r project org doc manuals R exts html Data in packages
  • 在swing中实现JTreeTable

    我想实现一个 JTreeTable 我在java官方网站上看到了这个例子 我是java初学者 我无法理解这个例子 我将树节点和子名称作为字符串 我该如何实施 有 仅我尝试过的产品 free SwingX 网豆Outline 如图所示here
  • java.lang.NoSuchFieldError: org.apache.http.message.BasicHeaderValueFormatter.INSTANCE android

    尝试使用下面的代码上传大视频但收到此错误java lang NoSuchFieldError org apache http message BasicHeaderValueFormatter INSTANCE gt 我猜它的发生是由于多个
  • 数据库关系

    在数据库中建立正确的关系除了数据完整性之外还有其他帮助吗 它们会提高还是阻碍绩效 只要您有与外键相对应的明显索引 就不会对性能产生明显的负面影响 这是您必须使用的最简单的数据库功能之一
  • 为什么 onchange 不起作用?

    我只是在网上寻找答案 但还没有找到任何答案 我正在使用 google 的 api 翻译 但我遇到了 JS 问题 事实上 除了一项操作之外 我的代码 100 正常 我的问题是当时没有给出翻译 js 将信息发送给 google 后 不会等到给出
  • Pdfbox:在旋转页面中绘制图像

    我有一个简单的 A4 pdf 文档 其中包含一个属性 Rotate 90 我的 pdf 的原始版本是横向的 但打印的是纵向 我正在尝试在肖像文档的左下角绘制一个小图像 到目前为止 这是我的代码 File file new File rota
  • 理解 JavaScript 中的 Promise

    我编写了很多 JavaScript 代码 虽然我认为我确实了解 Promise 的工作原理 但我不确定我是否完全理解 Promise 给 JS 世界带来的优势 考虑下面的代码 简单的异步调用以及包含进一步调用的回调等等 function d
  • 最优 Java 随机种子

    关于提供long播种java util Random 如果我实例化该对象一次 似乎如果我只是将时间作为种子 这对于程序的生命周期来说是令人满意的 这对于我的目的来说意味着一系列调用的结果nextDouble 看起来随机 假设出于代码简单的原
  • RadioButton.Checked 错误:Control.Checked 不能出现在 += 或 -= 的左侧

    我遇到了最奇怪的问题 我必须遗漏一些东西 这是导致错误的我的代码 if radLot Checked true SymbolSpecification LotRenderer if radWaterMeter Checked true Sy
  • MVC3 模型类的条件验证

    我正在使用实体框架和模型类 DonationForm 由视图模型类 CreateDonationForm 包装 为了遵循 DRY 原则 我在 Model 类 不仅仅是视图模型 上添加了验证注释 以便它们可以重用 但是 并非该类的所有属性都将
  • 让调试器在下一个事件时中断

    在 Visual Basic 6 0 IDE 中 可以中断正在运行的处于空闲状态 等待 UI 线程上的事件 的程序 然后按 F8 单步 此后 任何单击 鼠标悬停或导致代码的其他事件都会导致调试器在要执行的下一行代码处中断 这将是事件处理程序
  • PHP 中的乘法函数结果

    我还是 PHP 的初学者 我有一个小问题 我想乘以该值get formatted order total 3 75 我所做的是 get formatted order total 3 75 但它没有用 这是代码 li class total
  • Web 浏览器调用脚本

    我有一个 Web 浏览器 其中一些设置是使用 javascript 更改的 我正在尝试使用这个例子here但无法获得正确的语法 脚本看起来像这样 div class DisplayInput div
  • 从 .net 4 升级到 4.5 会破坏 Javascript 中的 Html.Raw 调用

    我在 c MVC 3 razor 页面中有以下代码 我将序列化数据传递到 KnockoutJs 的 javascript 变量中 var listData new JavaScriptSerializer Serialize Model L
  • 在 AngularJS 应用程序中加载 JSON(加载谷歌电子表格)

    我正在尝试在我的应用程序中加载 Google 电子表格 但我无法使其正常工作 我尝试了不同的方法来访问树结构 通过控制器和 或通过 html 但它们都不起作用 知道可能出了什么问题吗 这是我的控制器 app controller Super
  • 日期时间修改函数跳过二月

    当添加一个月时DateTime modify方法 结果跳过二月 为什么不输出2020 02 31 如何输出2020 02 29使用日期时间 该月的最后一天 date new DateTime 2020 01 31 echo date gt