日期转换mktime返回错误的日期

时间:2017-07-31 17:41:13

标签: php

我收到了这段代码

<?php
function dateFunc($month)
{
  setlocale(LC_TIME, 'spanish');
  $monthSub = date('m',strtotime($month));
  $name=strftime("%B",mktime(0,0,0,$monthSub,1,2000));
  $name = $name.' '.date('Y', strtotime($month));
  return strtoupper($name);
}
$output ="";


$output.=
dateFunc(date('Y-m', strtotime('-1 month'))).'<br>
'.dateFunc(date('Y-m', strtotime('-2 month'))).'<br>
'.dateFunc(date('Y-m', strtotime('-3 month'))).'<br>
'.dateFunc(date('Y-m', strtotime('-4 month'))).'<br>
'.dateFunc(date('Y-m', strtotime('-5 month'))).'<br>';

echo $output;
?>

输出

JULIO 2017
MAYO 2017
MAYO 2017
MARZO 2017
MARZO 2017

我期待这个输出

JULIO 2017
JUNIO 2017
MAYO 2017
ABRIL 2017
MARZO 2017

有一天我读了这个问题,冲突发生在30个月,而mktime()需要另一个参数,但我不记得如何修复它。

建议请...

2 个答案:

答案 0 :(得分:0)

以下是我可以采取的措施 https://iconoun.com/demo/temp_alberto.php

<?php // demo/temp_alberto.php
/**
 * Month computations
 *
 * https://stackoverflow.com/questions/45422134/date-conversion-mktime-returns-wrong-date
 */
error_reporting(E_ALL);
echo '<pre>';


function lastMonth($date='next month')
{
    $m = date('Y-m-1', strtotime($date));
    $x = date('F Y', strtotime($m . '- 1 day'));
    return strtoupper($x);
}

$out = NULL;

$lm = lastmonth();
$out .= PHP_EOL . $lm;

$lm = lastmonth($lm);
$out .= PHP_EOL . $lm;

$lm = lastmonth($lm);
$out .= PHP_EOL . $lm;

$lm = lastmonth($lm);
$out .= PHP_EOL . $lm;

$lm = lastmonth($lm);
$out .= PHP_EOL . $lm;

echo $out;

答案 1 :(得分:0)

你可以这样做:

$output.=
dateFunc((new DateTime(date("Y-m-1")))->modify("-5 month")->format("Y-m"));
echo $output;