php strtotime下个月的第一天不返回任何内容

cetgtptt  于 2023-05-16  发布在  PHP
关注(0)|答案(1)|浏览(83)

我一直在阅读关于php中strtotime和“下个月”问题的文章。我想做的是两个日期之间的月数。例如,如果我有开始日期01.02.2012和结束日期07.04.2012,我想得到返回值- 3个月。如果开始日期为2012年2月28日和2012年4月7日,则结果为3个月。我没有计算确切的天数/月数,只是两个日期之间的月数。这不是一个大问题,使它与一些奇怪的日期,mktime和strtotime的用法,但不幸的是,开始和停止日期可能是在两个不同的年份,所以

mktime(0,0,0,date('m')+1,1,date('Y');

不会工作(我不知道这一年,如果它在开始和结束日期之间变化。我可以计算它,但它不是很好的解决方案)。完美的解决方案是用途:

$stat = Array('02.01.2012', '07.04.2012')
$cursor = strtotime($stat[0]);
$stop = strtotime($stat[1]);
$counter = 0;
    while ( $cursor < $stop ) {
   $cursor = strtotime("first day of next month", $cursor);
   echo $cursor . '<br>';
   $counter++;
   if ( $counter > 100) { break; } // safety break;
    }
    echo $counter . '<br>';

不幸的是,strtotime没有返回正确的值。如果我使用它返回空字符串。有什么办法可以得到下个月第一天的时间戳吗?

解决方案

$stat = Array('02.01.2012', '01.04.2012');
$start = new DateTime( $stat[0] );
$stop = new DateTime( $stat[1] );
while ( $start->format( 'U') <= $stop->format( 'U' ) ) {
    $counter ++;
    echo $start->format('d:m:Y') . '<br>';
    $start->modify( 'first day of next month' );
}
echo '::' . $counter . '..<br>';
5lhxktic

5lhxktic1#

<?php
$stat = Array('02.01.2012', '07.04.2012');
$stop = strtotime($stat[1]);
list($d, $m, $y) = explode('.', $stat[0]);
$count = 0;
while (true) {
    $m++;
    $cursor = mktime(0, 0, 0, $m, $d, $y);
    if ($cursor < $stop) $count ++; else exit;
}
echo $count;
?>

The easy way:D

相关问题