我试图解释细节,这很容易理解.
我想根据月份和年份的差异列出月份和年份.
我正在实施基于开始月份的搜索功能,包括年份和年末.所以!
开始选择 - 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)
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:试图发表评论但是格式化已经搞砸了.(当然这个函数可以重写为一个衬里,但希望更具可读性)
您需要编写一些函数将日期转换为自特定日期和之后的几个月.例如,自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)
虽然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)
再一个月的清单