【问题标题】:February and strtotime二月和strtotime
【发布时间】:2013-03-26 13:41:01
【问题描述】:

好吗?

我正在尝试在这里打一个计算日期,但是我没有得到..

会发生以下情况:

$AtualMenos3 = date("m-d-Y", strtotime("2013-03-31 -3 month"));
$AtualMenos2 = date("m-d-Y", strtotime("2013-03-31 -2 month"));
$AtualMenos1 = date("m-d-Y", strtotime("2013-03-31 -1 month"));
$AtualMes = date("m-d-Y", strtotime("2013-03-31"));

正确的应该是:

03-31-2013
02-28-2013
01-31-2013
12-31-2012

但是,这个 php 计算日期错误,因为当月份是二月(只有 28 天)时,计算出错..

实际输出:

03-31-2013
03-03-2013
01-31-2013
12-31-2012

有谁知道我该如何解决这个问题?因为这很复杂..我没有想法...我什么都想不出来:\

【问题讨论】:

  • 不应该2013-03-31 -3 month2012-12-31吗?也许strtotime 不像你期望的那样工作?或许更强大的解决方案是将数据拆分为多个部分:日、月和年,然后从月中减去 3。
  • Strtotime 不适用于数学运算,请使用 DateTime::add 或 sub()
  • 你也可以试试 date('m-d-Y', strtotime('-1 month', strtotime('2013-03-31')))
  • 我尝试使用DataTime,但还是同样的错误;
  • @Amit,我试过你说的方法,但它是一样的..

标签: php date datetime strtotime


【解决方案1】:
    $datetime = new DateTime('2013-03-31');
    $datetime->modify('-1 month');
    echo $datetime->format('Y-m-t') . "<br>";
    $datetime->modify('-1 month');
    echo $datetime->format('Y-m-t') . "<br>";
    $datetime->modify('-1 month');
    echo $datetime->format('Y-m-t') . "<br>";

See it in action

【讨论】:

  • !看它成功了!我也尝试过使用 DataTime,但是我使用了 -> sub ("P1A") 并得到了同样的错误。但是因为它工作正常!谢谢!
  • 实际上没有用。刚刚在这里检查了你是在最后一天“t”而不是使用过去的日期。发生的情况是该日期是可变的,因为它来自先前的输入,因此不可能如此。
  • 您可以将t 更改为d 以获取日期。我以为你想要本月的最后一天,这就是我使用 t 的原因。
  • 我知道,但是如果我输入“d”,我们就会回到最初的问题。我的解决方案是创建一个函数来检查月份,如果月份 = 2,它会检查日期是 30 还是 31,如果他放(如果闰)28/29。不幸或幸运地不得不这样。
【解决方案2】:

找到该月最后一天的解决方法是:

 $lastDay = date("m-d-Y",(strtotime('next month',strtotime(date("m-01-Y"))) - 1)); 

希望它会有所帮助。

【讨论】:

  • 首先感谢您的帮助!问题是 31 可以是可变的,因为它是表单上的一个输入字段,您可以在其中输入要查看记录的日期。
  • 那我怕strtotime 帮不上忙... :-(
  • 我想我必须创建一个函数来检查月份,如果是 2,则检查 30/31 时的天数,如果有闰年,宁可放 27/28。
【解决方案3】:

如果你想坚持strtotime(),你可以很容易地通过从下个月减去一天来计算一个月的最后一天。

echo date("m-d-Y", strtotime("Apr 2013 -1 day")); // yields 03-31-2013
echo date("m-d-Y", strtotime("Mar 2013 -1 day")); // yields 02-28-2013
echo date("m-d-Y", strtotime("Feb 2013 -1 day")); // yields 01-31-2013

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2023-01-27
    • 2012-02-21
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多