【问题标题】:What happening to php date function [duplicate]php日期函数发生了什么[重复]
【发布时间】:2012-05-31 17:28:41
【问题描述】:

可能重复:
PHP date() and strtotime() return wrong months on 31st

我有这段代码,它会输出一些我认为奇怪的东西。所以,我在这里做错了什么。

<?php 
$sP1 = date('m Y');
$sP2 = date('m Y', strtotime('+01 month'));
$sP3 = date('m Y', strtotime('+02 month'));
$sP4 = date('m Y', strtotime('+03 month'));
echo $sP1.'<br>';
echo $sP2.'<br>';
echo $sP3.'<br>';
echo $sP4.'<br>';
?>

这个输出

05 2012
07 2012
07 2012
08 2012

我认为第二个应该是

06 2012

有人知道解决办法吗?

【问题讨论】:

标签: php date


【解决方案1】:

今天是 31 号,下个月只有 30 天,所以从今天起 1 个月后就是 7/12

assuming that today is May 31 2012

date('m Y') == 05 2012
date('m Y', strtotime('+1 month')) == 07 2012 because june has 30 days
date('m Y', strtotime('+2 month')) == 07 2012
date('m Y', strtotime('+3 month')) == 08 2012
date('m Y', strtotime('+4 month')) == 10 2012

我会取今天的日期并找到当月的第一天,然后如果你正在做一些需要每个月得到的事情,那么在上面加上一个月

【讨论】:

    【解决方案2】:

    正如其他人所说,这是因为今天是第 31 天,+1 个月等于 June-31,即变为 Jul-1。如果您在日期字符串中包含日期,您可以准确地看到这一点。

    <?php 
    $sP1 = date('m-d-Y');
    $sP2 = date('m-d-Y', strtotime('+01 month'));
    $sP3 = date('m-d-Y', strtotime('+02 month'));
    $sP4 = date('m-d-Y', strtotime('+03 month'));
    echo $sP1."\n";
    echo $sP2."\n";
    echo $sP3."\n";
    echo $sP4."\n";
    /* Outputs:
        05-31-2012
        07-01-2012
        07-31-2012
        08-31-2012
    */
    ?>
    

    strtotime 虽然可以将开始日期作为字符串的一部分,但正如 King 建议的那样,从第一个开始计算 +N 个月。所以像May-1-2012 +01 month这样的字符串比如:

    <?php
    $sP1 = date('m Y');
    $sP2 = date('m Y', strtotime(date('M-1-Y').' +01 month'));
    $sP3 = date('m Y', strtotime(date('M-1-Y').' +02 month'));
    $sP4 = date('m Y', strtotime(date('M-1-Y').' +03 month'));
    echo $sP1."\n";
    echo $sP2."\n";
    echo $sP3."\n";
    echo $sP4."\n";
    /* Outputs:
        05 2012
        06 2012
        07 2012
        08 2012
    */
    ?>
    

    http://codepad.org/auYLHvDI

    【讨论】:

      【解决方案3】:

      它按预期工作。简而言之,因为从 5 月 31 日开始的“一个月”是什么? 6月30日? 8 月 1 日?

      我的建议是,如果您需要连续月份,请计算从当月开始的偏移量,而不是当天。或者使用分解的月、日和年部分手动组成您要查找的日期。

      【讨论】:

      • 可怜的七月你做了什么? :(
      猜你喜欢
      • 2021-06-06
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      相关资源
      最近更新 更多