在 php 中获取前几个月
Getting previous months in php
我需要在 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 个月
即
如果当前月份是四月,则应显示二月、三月、四月
如果当前月份是一月,它应该显示十一月、十二月、一月
我试过了..
<?php
$month = date("m");
?>
但是在循环中我对
感到困惑
for($i = 1 ; $i <= $month; $i++)
就做:
date('m', strtotime('-1 month'));
获取上个月。
你可以输入 -2 或 -3 来得到 2 个月前或 3 个月前。
用您选择的格式替换 'm'。
简单易行:
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)));
}
如果你得到 $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>
试试这个..
echo date('M', strtotime('0 month'));
echo date('M', strtotime('-1 month'));
echo date('M', strtotime('-2 month'));
echo date('M', strtotime('-3 month'));
请注意,当使用当前日期(每月第 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>';
}
?>
// Today is 2015-02-30
echo date('Y-m-d', strtotime('last month'));
我需要在 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 个月
即
如果当前月份是四月,则应显示二月、三月、四月
如果当前月份是一月,它应该显示十一月、十二月、一月
我试过了..
<?php
$month = date("m");
?>
但是在循环中我对
感到困惑for($i = 1 ; $i <= $month; $i++)
就做:
date('m', strtotime('-1 month'));
获取上个月。
你可以输入 -2 或 -3 来得到 2 个月前或 3 个月前。
用您选择的格式替换 'm'。
简单易行:
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)));
}
如果你得到 $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>
试试这个..
echo date('M', strtotime('0 month'));
echo date('M', strtotime('-1 month'));
echo date('M', strtotime('-2 month'));
echo date('M', strtotime('-3 month'));
请注意,当使用当前日期(每月第 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>';
}
?>
// Today is 2015-02-30
echo date('Y-m-d', strtotime('last month'));