【问题标题】:PHP add month to date on a date with day of month 31PHP 在第 31 天的日期添加月份日期
【发布时间】:2014-09-30 05:35:23
【问题描述】:

我使用的代码在除 2015 年 5 月 31 日之外的所有日期都可以正常工作。 代码给我带来了下个月的第一天。 它适用于每个日期,即使一个月中的第 31 天也是如此。

$time = strtotime('2015-07-31');
$final = date("Y-m-1", strtotime("+1 month", $time));
echo $final;

输出将是 --> 2015-08-1。

由于某种原因,它在 2015-05-31 日期返回 2015-07-1 而不是 2015-06-01

$time = strtotime('2015-05-31');
$final = date("Y-m-1", strtotime("+1 month", $time));
echo $final;

这可能是因为 6-2014 有 30 天,而 8-2014 有 31 天,所以 +1 个月增加了 30 天而不是“月”。

我怎样才能在每个日期正确得到下个月的第一天?

谢谢。

【问题讨论】:

  • PHP last day of the month的可能重复
  • 这是一个不同的问题。
  • 我链接到的问题告诉您如何获取“本月的最后一天”,并且在您的问题中您询问了“下个月的第一天”。
  • 我知道,但是那里的答案并没有解决这个问题。
  • @rink.attendant.6:创建了小提琴,请您尝试使用您的链接解决ideone.com/9S0Xae

标签: php date datetime strtotime


【解决方案1】:

我认为这应该可行 -

$time = strtotime("2015-05-31");
echo $final = date("Y-m-d", strtotime("first day of next month", $time));

【讨论】:

  • 字符串不理解,返回“1969-12-31”。可能取决于 php 版本。是的,>=5.3
【解决方案2】:

你可以这样试试:

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

$date->add($interval);
echo $date->format('Y-m-d') . "\n";

$date->add($interval);
echo $date->format('Y-m-d') . "\n";
?>

输出:

2001-01-31
2001-03-03

欲了解更多信息:http://in3.php.net/manual/en/datetime.add.php

【讨论】:

  • 如果您在 2015-05-31 运行代码,输出将是“2015-07-01 2015-08-01”。同样的问题。
猜你喜欢
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多