0

我需要一份本月前 24 个月的清单。这是我的代码:

<?php
$monthbefore1  = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$monthbefore2  = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$monthbefore3  = mktime(0, 0, 0, date("m")-2, date("d"), date("Y"));
$monthbefore4  = mktime(0, 0, 0, date("m")-3, date("d"), date("Y"));
$monthbefore5  = mktime(0, 0, 0, date("m")-4, date("d"), date("Y"));
$monthbefore6  = mktime(0, 0, 0, date("m")-5, date("d"), date("Y"));
$monthbefore7  = mktime(0, 0, 0, date("m")-6, date("d"), date("Y"));
$monthbefore8  = mktime(0, 0, 0, date("m")-7, date("d"), date("Y"));
$monthbefore9  = mktime(0, 0, 0, date("m")-8, date("d"), date("Y"));
$monthbefore10 = mktime(0, 0, 0, date("m")-9, date("d"), date("Y"));
$monthbefore11 = mktime(0, 0, 0, date("m")-10, date("d"), date("Y"));
$monthbefore12 = mktime(0, 0, 0, date("m")-11, date("d"), date("Y"));
$monthbefore13 = mktime(0, 0, 0, date("m")-12, date("d"), date("Y"));
$monthbefore14 = mktime(0, 0, 0, date("m")-13, date("d"), date("Y"));
$monthbefore15 = mktime(0, 0, 0, date("m")-14, date("d"), date("Y"));
$monthbefore16 = mktime(0, 0, 0, date("m")-15, date("d"), date("Y"));
$monthbefore17 = mktime(0, 0, 0, date("m")-16, date("d"), date("Y"));
$monthbefore18 = mktime(0, 0, 0, date("m")-17, date("d"), date("Y"));
$monthbefore19 = mktime(0, 0, 0, date("m")-18, date("d"), date("Y"));
$monthbefore20 = mktime(0, 0, 0, date("m")-19, date("d"), date("Y"));
$monthbefore21 = mktime(0, 0, 0, date("m")-20, date("d"), date("Y"));
$monthbefore22 = mktime(0, 0, 0, date("m")-21, date("d"), date("Y"));
$monthbefore23 = mktime(0, 0, 0, date("m")-22, date("d"), date("Y"));
$monthbefore24 = mktime(0, 0, 0, date("m")-23, date("d"), date("Y"));

echo date("F", $monthbefore24);
echo date("F", $monthbefore23);
echo date("F", $monthbefore22);
echo date("F", $monthbefore21);
echo date("F", $monthbefore20);
echo date("F", $monthbefore19);
echo date("F", $monthbefore18);
echo date("F", $monthbefore17);
echo date("F", $monthbefore16);
echo date("F", $monthbefore14);
echo date("F", $monthbefore13);
echo date("F", $monthbefore12);
echo date("F", $monthbefore11);
echo date("F", $monthbefore10);
echo date("F", $monthbefore9);
echo date("F", $monthbefore8);
echo date("F", $monthbefore7);
echo date("F", $monthbefore6);
echo date("F", $monthbefore5);
echo date("F", $monthbefore4);
echo date("F", $monthbefore3);
echo date("F", $monthbefore2);
echo date("F", $monthbefore1);
?>

为什么结果看起来像这样?*三月三月*四月五月六月七月八月九月十二月一月*三月三月*四月五月六月七月八月九月十月十一月十二月一月

4

5 回答 5

2

今天是 1 月 30 日,2 月没有 30 天,所以在日期上加了 2 天,结果是 3 月 看看 PHP 日期函数手册http://www.php.net/manual /en/function.date.php

于 2013-01-30T10:37:29.730 回答
1

您最有可能获得重复的三月,因为您使用今天的第 30 天,并非所有月份都有 30 天。你可以使用这些

    $months = array();
    $date = mktime(0, 0, 0, date('n'), 1);
    for($i = -1; $i >= -24; $i--) {
        $months[] = date('F', strtotime($i.' month', $date));
    }
    print_r($months);

为了便于使用,我已将结果放入数组中,但您可以简单地回显结果:

    $date = mktime(0, 0, 0, date('n'), 1);
    for($i = -1; $i >= -24; $i--) {
        echo date('F', strtotime($i.' month', $date));
    }

第一行创建一个时间戳,其中包含今天的月份和年份,但包含该月的第一天。然后第三行从日期中删除 $i 个月数,并将生成的时间戳转换为月份的字符串表示形式。

于 2013-01-30T10:54:31.587 回答
0
for ($i=-1; $i--; $i>-24)
{
      echo date("F", strtotime($i." months"));
}
于 2013-01-30T10:41:50.193 回答
0

尝试查找 date() 手册并描述您想要获得的内容。

于 2013-01-30T10:37:07.807 回答
0

我会以不同的方式解决你的问题。我的问题是:你对今年第 0 个月有什么期望?还是今年的-1 月?查看 date() 的文档以找出答案。

我会使用 PHP 提供的日期计算。日期时间包。

这是一个例子:

// Get an instance of DateTime with current time (no argument)
$date = new DateTime();

// Create a DateInterval (that may be a bit confusing) by one month
$interval = new DateInterval('P1M');
# Same as: $interval = DateInterval::createFromDateString('1 month')

// What date do we have now?
echo $date->format('F');

// What date is it if we substract one month and print it?
echo $date->sub($interval)->format('F');
echo $date->sub($interval)->format('F');
echo $date->sub($interval)->format('F');
echo $date->sub($interval)->format('F');
echo $date->sub($interval)->format('F');
echo $date->sub($interval)->format('F');
echo $date->sub($interval)->format('F');
echo $date->sub($interval)->format('F');
echo $date->sub($interval)->format('F');
echo $date->sub($interval)->format('F');
于 2013-01-30T11:00:46.600 回答