在PHP Laravel中解析日期时出错

时间:2017-09-07 08:21:55

标签: php laravel php-carbon

我知道这个主题非常广泛,但这些主题中的所有其他解决方案对我没有帮助。

我有这段代码:

function extractMonthsAndCalculate($value, $start_date, $end_date){
    $start = Carbon::createFromFormat('Y-m-d',$start_date)->firstOfMonth();
    $end = Carbon::createFromFormat('Y-m-d',$end_date)->lastOfMonth();

    $test = $end->diffInMonths($start);

    for ($i = $start; $i <= $test; $i++) {

        $wageYear  = Carbon::createFromFormat('Y-m-d',$start_date)->year;
//do calculations
    }
}

但我收到此错误

  

类Carbon \ Carbon的对象无法转换为int

如果我在test

处解析值
$test = Carbon::parse($end->diffInMonths($start));

我一直收到此错误

  

DateTime :: __ construct():无法解析时间字符串

这是什么解决方案?

3 个答案:

答案 0 :(得分:0)

您必须更正 条件。原因$i必须是整数:

function extractMonthsAndCalculate($value, $start_date, $end_date) {
    $start = Carbon::createFromFormat('Y-m-d', $start_date)->firstOfMonth();
    $end = Carbon::createFromFormat('Y-m-d', $end_date)->lastOfMonth();

    $test = $end->diffInMonths($start);

    for ($i = $start->month; $i <= $test; $i++) {

        $wageYear = Carbon::createFromFormat('Y-m-d', $start_date)->year;
        //do calculations
    }
}

答案 1 :(得分:0)

您将对象与字符串进行比较并尝试迭代对象;

试试这个解决方案:

for ($i = (int) $start->format('m'); $i <= (int) $test; $i++)

答案 2 :(得分:0)

如果我理解你的问题,你可以这样做:

$diff = $end->diffInMonths($start);

for ($i = 0; $i < $diff; $i++) {

    $wageYear = $start->year;

    //Do calculations

    $start->addMonth();
}

希望这有帮助!