我正在尝试使用'M-Y'
以format('M-Y')
的格式查找最近的12个日期,但出现类似以下错误:
类:“ Symfony \ Component \ Debug \ Exception \ FatalThrowableError”
消息:“在字符串上调用成员函数format()”
我已经尝试过
$date = new DateTime();
$mois = $date->format('M-Y');
$mois1 = $date->format('Y-m-d');
array_push($format1, $mois);
array_push($format2, $mois1);
结果不是我所期望的。我得到Jun-2019
12次。
我的代码是这样:
public function getMonthLibelleByDates($filtre) {
$format1 = []; $format2 = [];
$month = time();
for ($i = 1; $i <= 12; $i++) {
$month = strtotime('last month', $month);
$months[] = date("r", $month);
}
foreach($months as $mois) {
array_push($format1, $mois->format('M-Y'));
array_push($format2, $mois->format('Y-m-d'));
}
$response = array(
'format1'=> $format1,
'format2' => $format2
);
return $response;
}
我希望支出是从当前日期算起的最近12个月。
答案 0 :(得分:1)
您似乎正在混用时间戳记,date()
字符串和DateTime对象。
您可以做的是从今天开始创建一个DateTime对象,然后在12个迭代循环中对其进行修改以减去一个月。在每次迭代中添加格式,然后返回响应。
public function getMonthLibelleByDates($filtre) {
$format1 = [];
$format2 = [];
$date = new DateTime();
for ($i = 1; $i <= 12; $i++) {
$format1[] = $date->format("M-Y");
$format2[] = $date->format("Y-m-d");
$date->modify("-1 month");
}
return array(
'format1'=> $format1,
'format2' => $format2
);
}
作为旁注,似乎未使用参数$filtre
,因此它可能会被删除?
答案 1 :(得分:1)
有一种最简单的方法来实现这一目标...
var_dump(getMonthLibelleByDates());
function getMonthLibelleByDates() {
$res = [
'format1' => [],
'format2' => []
];
$timestampBuffer = NULL;
for ($i = 1; $i <= 12; $i++) {
$timestampBuffer = strtotime("-$i month");
$res['format1'][] = date('M-Y', $timestampBuffer);
$res['format2'][] = date('Y-m-d', $timestampBuffer);
}
return $res;
}
打印...
array(2) {
["format1"]=>
array(12) {
[0]=>
string(8) "May-2019"
[1]=>
string(8) "Apr-2019"
//... (too long)
[10]=>
string(8) "Jul-2018"
[11]=>
string(8) "Jun-2018"
}
["format2"]=>
array(12) {
[0]=>
string(10) "2019-05-26"
[1]=>
string(10) "2019-04-26"
//... (too long)
[10]=>
string(10) "2018-07-26"
[11]=>
string(10) "2018-06-26"
}
}