Углерод \ Углерод дает мне проблемы - PullRequest
0 голосов
/ 30 ноября 2018

Здравствуйте, я пытаюсь создать приложение, которое строит график за последние 7 дней, начиная с сегодняшнего дня, и я использую Laravel 5 - Carbon \ Carbon date package .. так что если сегодня среда, то это закончится во вторникесли сегодня пятница, то это закончится в четверг на следующей неделе

    $now = Carbon::now();

    $ar = [];
    for($i=1; $i<7; $i++){
        array_push($ar, $now->subDays($i));
    }

    pr($ar, true);

, где pr () - вспомогательная функция, похожая на dd (). Я написал, что просто умираю просто, но я получаю этот выводс первой проблемой, состоящей в том, что, имея в виду, что сегодня - пятница, 30 ноября 2018, 2018-11-30

Array(
[0] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

[1] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

[2] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

[3] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

[4] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

[5] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

, оно должно продолжаться как 29, 28, 27, но оно идет далеконазад к 9 ноября, и это даже не последовательность, как 09, 08, 07, 06, просто 09 ноября, и я не знаю, что я делаю не так, пожалуйста, мне нужна помощь, спасибо.

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018
$ar = [];
for($i=1; $i<7; $i++){
    $now = Carbon::now();
    $ar[] = $now->subDays($i);
}

Carbon будет обновлять свой экземпляр каждый раз, когда вы звоните в подпочту, поэтому вам нужно переинициализировать.

0 голосов
/ 30 ноября 2018
$day = Carbon::today();

$ar = [];

for($i=1; $i<=7; $i++){
 array_push($ar, $day);
 $day->subDay(1);
}

Здесь $day->subDay(1); метод изменяет само значение объекта, вычитая на 1 вместо возврата измененного значения.

0 голосов
/ 30 ноября 2018

Когда вы используете функцию для углеродного объекта, объект обновится сам и вернет ссылку на объект.Итак, ваш массив $ar содержит несколько ссылок на один и тот же объект.Каждый раз, когда вы используете subDays, вы фактически обновляете каждый объект в вашем массиве.

Если вы хотите заполнить свой массив различными углеродными объектами, вы должны каждый раз создавать новый экземпляр.Например, вот так:

$ar = [];
for($i=1; $i<7; $i++){
    array_push($ar, now()->subDays($i));
}

now() - это вспомогательная функция в Laravel, которая возвращает новый экземпляр Carbon::now().

...