当前位置: 首页 > 面试题库 >

PHP DateTime ::修改加减月份

刘奇
2023-03-14
问题内容

我已经与进行了大量合作DateTime class,最近在添加几个月时遇到了我认为是错误的错误。经过一些研究,看来它不是错误,而是按预期工作。根据此处找到的文档:

Example#2当增加或减少月份时要当心

<?php
$date = new DateTime('2000-12-31');

$date->modify('+1 month');
echo $date->format('Y-m-d') . "\n";

$date->modify('+1 month');
echo $date->format('Y-m-d') . "\n";
?>
The above example will output:
2001-01-31
2001-03-03

谁能证明为什么这不被认为是错误?

此外,是否有人有任何优雅的解决方案来纠正此问题,并使+1个月按预期工作,而不是按预期工作?


问题答案:

为什么不是错误:

当前行为是正确的。内部发生以下情况:

  1. +1 month将月份数(最初为1)增加1。这就是约会2010-02-31

  2. 第二个月(2月)在2010年只有28天,因此PHP会通过自动计算从2月1日开始的天数来自动更正此问题。然后,您将在3月3日结束。

如何获得想要的东西:

要获得您想要的东西,请执行以下操作:手动检查下个月。然后加上下个月的天数。

希望您可以自己编写代码。我只是在做什么。

PHP 5.3方式:

要获得正确的行为,可以使用PHP 5.3的新功能之一,该功能引入了相对时间节first day of。该节可与结合使用next monthfifth month+8 months转到指定月份的第一天。+1 month您可以使用以下代码来代替下个月的工作,而不用执行以下操作:

<?php
$d = new DateTime( '2010-01-31' );
$d->modify( 'first day of next month' );
echo $d->format( 'F' ), "\n";
?>

该脚本将正确输出February。PHP处理此first day of next month节时,将发生以下情况:

  1. next month将月份数(最初为1)增加1。这使日期为2010-02-31。

  2. first day of将日期设置为1,得出日期为2010-02-01。



 类似资料:
  • 本文向大家介绍Java对日期Date类进行加减运算、年份加减月份加减、时间差等等,包括了Java对日期Date类进行加减运算、年份加减月份加减、时间差等等的使用技巧和注意事项,需要的朋友参考一下 实现代码一: 注:在Calendar对象的add方法中,第二个参数为正数表示“加”,负数表示“减”。 代码二: java date 日期加减天数 测试类代码: 运行结果: 2014-10-06 2014-

  • 在下面的代码中,当我从date减去day时,我会得到day和month减去1。 有人知道为什么会这样吗?或者,如果我是用错误的方法做的,谁能建议正确的方法吗?

  • 在Java 8中,Stream有一个方法reduce: 累加器运算符是否允许修改其任一参数?我不这么认为,因为JavaDoc说累加器应该是非干涉的,尽管所有示例都谈到修改集合,而不是修改集合的元素。 举个具体的例子,如果我们有 假设整数是可变的,那么可以通过将第二个参数的值添加到第一个参数中(就地)来修改第一个参数吗? 我想不会,但我也想举一个例子,说明这种干扰在哪里会引起问题。

  • 问题内容: 我看到在dart中有一个Duration类,但不能用它加减年或月。您如何处理此问题,我需要从日期中减去6个月。是否有类似momentjs的飞镖之类的东西?谢谢 问题答案: 好的,所以您可以按照以下两个步骤操作,取自@zoechi(Flutter的重要贡献者): 定义基准时间,让我们说: 现在,您想要新的日期: 你会得到

  • 问题内容: 我需要用mysql减去1个月零4天,我看到命令 完美适用于1个月但1个月零4天,使用31天对于每个月带来30、29、28的每月无效。我无法添加31 + 4,30 + 4,等等 问题答案: 使用 [docs] 像:

  • 我看到在飞镖中有一个类持续时间,但它不能用于加/减年或月。你是怎么解决这个问题的,我需要从一个日期减去6个月。有没有像瞬间.js飞镖或周围的东西?谢谢