【问题标题】:How can i get the current month and previous three months using PHP如何使用 PHP 获取当前月份和前三个月
【发布时间】:2009-10-20 12:32:29
【问题描述】:

谁能告诉我如何使用 PHP 获取当前月份和前三个月

例如:

echo date("y:M:d");

输出将是:09:Oct:20

但我需要:

八月

九月

十月

作为输出。

提前谢谢...

费罗

【问题讨论】:

    标签: php date


    【解决方案1】:

    对于月份的完整文本表示,您需要传递“F”:

    echo date("y:F:d");
    

    上个月你可以使用

    echo date("y:F:d",strtotime("-1 Months"));

    【讨论】:

    • 在 31 号执行时会失败。看我的回答。
    【解决方案2】:

    注意FUAH!其他答案在当月 31 日执行时将失败。改用这个:

    /*
    Handles month/year increment calculations in a safe way,
    avoiding the pitfall of 'fuzzy' month units.
    
    Returns a DateTime object with incremented month values, and a date value == 1.
    */
    function incrementDate($startDate, $monthIncrement = 0) {
    
        $startingTimeStamp = $startDate->getTimestamp();
        // Get the month value of the given date:
        $monthString = date('Y-m', $startingTimeStamp);
        // Create a date string corresponding to the 1st of the give month,
        // making it safe for monthly calculations:
        $safeDateString = "first day of $monthString";
        // Increment date by given month increments:
        $incrementedDateString = "$safeDateString $monthIncrement month";
        $newTimeStamp = strtotime($incrementedDateString);
        $newDate = DateTime::createFromFormat('U', $newTimeStamp);
        return $newDate;
    }
    
    $currentDate = new DateTime();
    $oneMonthAgo = incrementDate($currentDate, -1);
    $twoMonthsAgo = incrementDate($currentDate, -2);
    $threeMonthsAgo = incrementDate($currentDate, -3);
    
    echo "THIS: ".$currentDate->format('F Y') . "<br>";
    echo "1 AGO: ".$oneMonthAgo->format('F Y') . "<br>";
    echo "2 AGO: ".$twoMonthsAgo->format('F Y') . "<br>";
    echo "3 AGO: ".$threeMonthsAgo->format('F Y') . "<br>";
    

    更多,看我的回答here

    【讨论】:

      【解决方案3】:

      本月

      date("y:M:d", mktime(0, 0, 0, date('m'), date('d'), date('Y')));
      

      前几个月

      date("y:M:d", mktime(0, 0, 0, date('m') - 1, date('d'), date('Y')));
      date("y:M:d", mktime(0, 0, 0, date('m') - 2, date('d'), date('Y')));
      

      【讨论】:

      • 你的这个答案产生解析错误解析错误:语法错误,意外';'在 E:\Program Files\xampp\htdocs\test_Fero\test.php 第 3 行
      • 如果计算左括号(,您会发现每行有五个,但只有四个右括号。如果你平衡这两个,每个五个,代码应该可以工作。
      • 看起来你需要在分号之前再关闭一个")"。
      • @Fero 在分号前的行尾添加一个额外的 ')'。
      • 这在当月的最后一天不起作用。在 5 月 31 日运行 date("y:M:d", mktime(0, 0, 0, date('m') - 1, date('d'), date('Y'))) 会导致 12:May:01
      【解决方案4】:

      如果你想成为 OOP,试试这个:

      $dp=new DatePeriod(date_create(),DateInterval::createFromDateString('last month'),2);
      foreach($dp as $dt) echo $dt->format("y:M:d"),"\n"; //or "y F d"
      

      输出:

      • 09:10:20
      • 09:9:20
      • 09:8:20

      【讨论】:

        【解决方案5】:

        尝试在 PHP 中使用内置的 strtotime 函数并使用 'F' 进行全文输出:

        echo date('y:F:d'); // first month
        echo date('y:F:d', strtotime('-1 month')); // previous month
        echo date('y:F:d', strtotime('-2 month')); // second previous month
        echo date('y:F:d', strtotime('-3 month')); // third previous month
        

        【讨论】:

          【解决方案6】:

          你需要使用 date("F");获取日期的全文表示。

          【讨论】:

            【解决方案7】:
            DECLARE @STARTDATE INT
            
            SET @STARTDATE = -12
            
            WHILE @STARTDATE < 0
            
            BEGIN
            
            PRINT DATENAME(MONTH,DATEADD(MM,@STARTDATE,GETDATE()))+' '+ DATENAME(YEAR, DATEADD(MM,@STARTDATE ,GETDATE()))
            
            SET @STARTDATE =@STARTDATE+1
            
            END
            

            【讨论】:

              【解决方案8】:
              echo date('F', strtotime('-2 month')), '<br>',
                   date('F', strtotime('last month')), '<br>',
                   date('F');
              

              【讨论】:

              • 记住“last”只是“-1”的同义词,你不应该在不必要的时候加倍使用strtotime();这只是在浪费周期。
              • @Nathan Kleyn,我没有提到“-1 个月”的语法,“上个月”只是一个可行的猜测。
              【解决方案9】:
              DECLARE @STARTDATE VARCHAR(MAX)
              DECLARE @ENDDATE VARCHAR(MAX)
              DECLARE @A INT
              SET @A=-12
              SET @STARTDATE= DATENAME(MONTH,GETDATE())+ DATENAME(YEAR, DATEADD(MONTH,0,GETDATE()))
              WHILE @A < 0
              BEGIN 
              SET @STARTDATE = DATENAME(MONTH,DATEADD(MONTH,@A,GETDATE()))+' '+ DATENAME(YEAR, DATEADD(MONTH,@A,GETDATE()))
              SET @A=@A+1
              PRINT @STARTDATE
              END
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-01-30
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多