获取下个月的最后一个月的日期

时间:2014-05-09 05:04:48

标签: php mysql date

是否有可能获得未来12个月的最后一个月日期。

例如,

。 (YYYY-MM-DD)

全年:

today is:      2014-05-09 
get 1st month: 2014-06-09
get 2nd month: 2014-07-09
get 3rd month: 2014-08-09
get 4th month: 2014-09-09
get 5th month: 2014-10-09
get 6th month: 2014-11-09
get 7th month: 2014-12-09
get 8th month: 2015-01-09
get 9th month: 2015-02-09
get 10th month: 2015-03-09
get 11th month: 2015-04-09
get 12th month: 2015-05-09
半年:

today is:      2014-05-29 
get 1st month: 2014-06-29
get 2nd month: 2014-07-29
get 3rd month: 2014-08-29
get 4th month: 2014-09-29
get 5th month: 2014-10-29
get 6th month: 2014-11-29
get 7th month: 2014-12-29
get 8th month: 2015-01-29
**get 9th month: 2015-02-28**
get 10th month: 2015-03-29
get 11th month: 2015-04-29
get 12th month: 2015-05-29

谢谢

4 个答案:

答案 0 :(得分:3)

在本月的最后一天,您可以使用:

<?php
$date = time();
$full_year = array();
for($idx = 1 ; $idx <= 12 ; $idx++) {
    $tmp = strtotime("last day of next month",$date);
    $full_year[] = date("Y-m-d",$tmp);
    $date = $tmp;
}

echo '<pre>';
print_r($full_year);
echo '</pre>';
?>

$ full_year变量将包含每个月的日期(从下个月的0开始到11结束)(您可以使用任何日期,如$ full_year [0] ... $ full_year [11])

如果您希望存储在full_year中的结果与您提供的示例相同(这不是该月的最后一天,而是从今天开始仅1个月),您可以使用:

<?php
$date = time();
$full_year = array();
for($idx = 1 ; $idx <= 12 ; $idx++) {
    $tmp = strtotime("next month",$date);
    $full_year[] = date("Y-m-d",$tmp);
    $date = $tmp;
}

echo '<pre>';
print_r($full_year);
echo '</pre>';
?>

答案 1 :(得分:2)

这里是该想法的示例代码,它获取一个月中的总天数,该天数等于该月的最后一个日期。

$month = 1;
$year = 2014;
echo date('t',mktime(0, 0, 0, $month, 1, $year));

循环问题是什么?只要你做得对,你仍然可以在其中分配值。 编辑你的问题并包括你分配变量的部分,也许其他人都可以提供帮助。

答案 2 :(得分:0)

你可以手动增加,就像这样......

$interval="+1 month";
$date=date("Y-m-d");
$month1=date("Y-m-d", strtotime($interval, $date));
$month2=date("Y-m-d", strtotime($interval, $month1));
$month3=date("Y-m-d", strtotime($interval, $month2));

... etc

但我相信你可以看到这会变得乏味。

我建议循环,但将变量存储在一个数组中(一个可以存储多个变量的构造......就像这样:

$interval="+1 month";
$months=array();
$date=date("Y-m-d");
array_push($months, date("Y-m-d", strtotime($interval, $date))); //create the first array element, so that we don't have to check it's existence and waste time in the loop

for ($i=1; $i<12; $i++) 
{
    array_push($months, date("Y-m-d", strtotime($interval, $months[i-1])));
}

我还没有对此进行过测试,但如果没有太多修改,它应该或多或少都能正常工作:)

答案 3 :(得分:0)

不知道为什么你需要在没有循环的情况下这样做。 Tanatos已经发布了一个很好的答案,如何通过循环来做到这一点。但是因为你说你不想这样做(无论出于何种原因),这里是手动替代方案:

$stamp = "last day of next month"; 
//$stamp = "+1 month"; // Use this if you want what is in your example
$month1 = date('Y-m-d', strtotime($stamp, time()));
$month2 = date('Y-m-d', strtotime($stamp, strtotime($month1)));
$month3 = date('Y-m-d', strtotime($stamp, strtotime($month2)));
$month4 = date('Y-m-d', strtotime($stamp, strtotime($month3)));
$month5 = date('Y-m-d', strtotime($stamp, strtotime($month4)));
$month6 = date('Y-m-d', strtotime($stamp, strtotime($month5)));
$month7 = date('Y-m-d', strtotime($stamp, strtotime($month6)));
$month8 = date('Y-m-d', strtotime($stamp, strtotime($month7)));
$month9 = date('Y-m-d', strtotime($stamp, strtotime($month8)));
$month10 = date('Y-m-d', strtotime($stamp, strtotime($month9)));
$month11 = date('Y-m-d', strtotime($stamp, strtotime($month10)));
$month12 = date('Y-m-d', strtotime($stamp, strtotime($month11)));