【问题标题】:Getting previous months in php在php中获取前几个月
【发布时间】:2015-04-29 20:22:34
【问题描述】:

我需要在php中显示上个月的3个月

这是我目前尝试过的

<select style='width: 112px;' name='PayMonth'>
<option name="PayMonth" value=''>Select Month</option>   
<?php
for($i = 1 ; $i <= 12; $i++)
{
$allmonth = date("F",mktime(0,0,0,$i,1,date("Y")))
?>
<option value="<?php echo $i; ?>" ><?php echo date("F",mktime(0,0,0,$i,1,date("Y")));?>
</option>
<?php
}?>

这将显示所有月份

但是我怎样才能显示从当月开始的 3 个月

即,

如果当前月份是四月,则应显示二月、三月、四月

如果当前月份是 1 月,则应显示 nov、dec、jan

我试过了..

<?php

$month = date("m");

?>

但在循环中我对

感到困惑
for($i = 1 ; $i <= $month; $i++)

【问题讨论】:

    标签: php date select


    【解决方案1】:

    如果你得到$month = date("m"); 那么你的forloop应该是

    for($i = $month-3 ; $i <= $month; $i++)
    

    旁注:

    当你使用时

    <option value="<?php echo $i; ?>" ><?php echo date("F",mktime(0,0,0,$i,1,date("Y")));?>
    

    您可能会在值中得到 -1、-2。所以你应该改变

    <option value="<?php echo date("m",mktime(0,0,0,$i,1,date("Y"))); ?>" ><?php echo date("F",mktime(0,0,0,$i,1,date("Y")));?>
    

    得到

    <select style='width: 112px;' name='PayMonth'>
      <option name="PayMonth" value=''>Select Month</option>   
      <option value="11" >November  </option>
      <option value="12" >December  </option>
      <option value="01" >January  </option>
      <option value="02" >February  </option>   
    </select> 
    

    【讨论】:

      【解决方案2】:

      像蛋糕一样简单:

      echo date('Y-m-d', strtotime("first day of -1 month"));
      

      您可以将 -1 替换为您选择的数字:

      <?php
      foreach(range(-1,-3,-1) as $value) {
          echo date('Y-m-d', strtotime(sprintf("first day of %d month", $value)));
      }
      

      【讨论】:

        【解决方案3】:

        只要做:

        date('m', strtotime('-1 month'));
        

        上个月拿到的。

        您可以输入 -2 或 -3 来表示 2 个月前或 3 个月前。

        用您选择的格式替换“m”。

        【讨论】:

          【解决方案4】:

          试试这个..

          echo date('M', strtotime('0 month'));
          echo date('M', strtotime('-1 month'));
          echo date('M', strtotime('-2 month'));
          echo date('M', strtotime('-3 month'));
          

          【讨论】:

            【解决方案5】:

            考虑到如果使用当前日期(每月第 31 天)使用几个月前的结果,您会得到错误的结果。

            试试这个:

            <?
            $monthsBack = 3;
            // we need to do set day to middle of the month,
            // otherwise "-x month" will return wrong results on the 31st of each month:
            $now =  mktime(0, 0, 0, date("m"), 15, date("Y"));
            
            for ($i1=0; $i1<$monthsBack; $i1++) {
                $displayDate = strtotime("-{$monthsBack} month", $now);
                echo '<option value="'.date("m", $displayDate).'" >'.date("F", $displayDate).'</option>';
            }
            ?>
            

            【讨论】:

              【解决方案6】:
              // Today is 2015-02-30
              echo date('Y-m-d', strtotime('last month'));
              

              【讨论】:

              • 虽然这可能会回答这个问题,但在您的答案中加入一些文字来解释您在做什么总是一个好主意。阅读how to write a good answer
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-06-01
              • 2016-05-21
              相关资源
              最近更新 更多