PHP中两个日期之间所有月份和年份的列表

san*_*osh 4 php mysql date

我试图解释细节,这很容易理解.

我想根据月份和年份的差异列出月份和年份.

我正在实施基于开始月份的搜索功能,包括年份和年末.所以!

开始选择 - 01(月)-2009(年)

结束选择10(月)-2009(年)

我想从MySQL得到的是:

Month                        Year
JAN                          2009
FEB                          2009
MAR                          2009
APR                          2009
MAY                          2009
JUN                          2009
JUL                          2009
AUG                          2009
SEP                          2009
OCT                          2009
Run Code Online (Sandbox Code Playgroud)

elv*_*o79 9

FractalizeR答案是正确的.

让我通过定义函数来扩展:

function GetMonthsFromDate($myDate) {
  $year = (int) date('Y',$myDate);
  $months = (int) date('m', $myDate);
  $dateAsMonths = 12*$year + $months;
  return $dateAsMonths;
}

function GetDateFromMonths($months) {
  $years = (int) $months / 12;
  $month = (int) $months % 12;
  $myDate = strtotime("$years/$month/01"); //makes a date like 2009/12/01
  return $myDate;
}
Run Code Online (Sandbox Code Playgroud)

PS:试图发表评论但是格式化已经搞砸了.(当然这个函数可以重写为一个衬里,但希望更具可读性)


Vla*_*sny 8

您需要编写一些函数将日期转换为自特定日期和之后的几个月.例如,自1980年1月以来.

Jan 1980 = 0;
Dec 1980 = 12;
Jan 1981 = 13 etc.
Run Code Online (Sandbox Code Playgroud)

然后你只需做简单的"for"循环:

for ($i = GetMonthsFromDate($StartDate), $i <= GetMonthsFromDate($StopDate), $i++) {
   echo(GetDateFromMonths($i));
}
Run Code Online (Sandbox Code Playgroud)


elv*_*o79 8

虽然FractalizeR答案是正确的.还有另一种选择.

利用strtotime('2009/08/01 - 1个月')做正确的事情并删除1个月这一事实.

<?php
$startDate = strtotime("$startYear/$startMonth/01");
$endDate   = strtotime("$endYear/$endMonth/01");

$currentDate = $endDate;

while ($currentDate >= $startDate) {
    echo date('Y/m',$currentDate);
    $currentDate = strtotime( date('Y/m/01/',$currentDate).' -1 month');
}
Run Code Online (Sandbox Code Playgroud)

再一个月的清单