【问题标题】:PHP DateTime return not exepected resultPHP DateTime 返回非预期结果
【发布时间】:2016-10-11 14:25:19
【问题描述】:

我试图在 PHP 中的 Date 上获得 -2 个月。 大多数时候,结果是好的,但有一次,结果是错误的。

$d = 1409436000;    // 31-8-2014

$d1 = new DateTime(date("d-m-Y", $d));

$d1->modify("-2 month");

echo $d1->format("d-m-Y");

// expected : 30-06-2014
// got      : 01-07-2014

我当前的 PHP 版本是:5.6.23-0+deb8u1 我没有对 TimeZone 进行任何配置。

那么:为什么我会得到这个结果?是因为八月和七月有31天吗?还是 phpversion 上的当前错误?时区 ?

谢谢 =)

【问题讨论】:

  • 为我工作.. 我得到了 30-06-2014
  • 你可以试试:$d = 1409436000; // 31-8-2014 $d1 = new DateTime(); $d1->setTimestamp($d); $d1->modify("-2 month"); echo $d1->format("d-m-Y");
  • 我实际上也得到了01-07-2014。我正在运行 PHP 7。
  • @MagnusEriksson,好吧,我并不孤单 =) 这不正常,不是吗?

标签: php date datetime compare


【解决方案1】:

根据 cmets 和链接,我这样解决了我的问题:

$d = 1409436000;    // 31-8-2014

$d1 = strtotime("first day of this month", $d);
$d1 = strtotime("-2 month", $d1);
$d1 = strtotime("last day of this month", $d1);

echo date("d-m-Y", $d1);
  • 确保获得正确结果的方法是采用 从你约会开始的第一天。
  • 制作您需要的东西。
  • 获取当前月份的最后一天。

问题是: 我试图让“2014 年 8 月 31 日 -2 个月”女巫等于“2014 年 6 月 31 日”。

31/06/2014 => 此日期不存在,PHP 会将其转换为“01/07/2014”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2011-08-09
    • 2010-09-22
    • 2021-05-17
    • 2018-02-19
    • 2018-03-23
    相关资源
    最近更新 更多