Php Carbon настраивает диапазон времени и судит, истекает ли он - PullRequest
0 голосов
/ 01 июня 2019

описание :

Мне нужно получить дату от текущей даты до следующих 5 дней.И нужно настроить текущее время, и сделать некоторые ограничения

дата начала:

2019-06-01

дата окончания:

2019-06-05

Дневной период времени:

08 ~ 10 10 ~ 12 12 ~ 14 14 ~ 16 16 ~18 18 ~ 20

Пример 1:

Если текущее время находится в диапазоне 2019-06-01 00:00 - 10: 00

результат :

array:2 [▼
  0 => [
    'date' => '2019-06-01',
    "weekstr":"Saturday",
    "subdate":"06-01"
    'timelist' => [
        [
            'period'    => '08 ~ 10', 
            'starthour' => '08',
            'endhour'   => '10',
            'expired'   => false
        ]
        [
            'period'    => '10 ~ 12', 
            'starthour' => '10',
            'endhour'   => '12',
            'expired'   => false
        ]
    ]
  ]
  1 => [
    'date' => '2019-06-02',
    "weekstr":"Saturday",
    "subdate":"06-01"
    'timelist' => [
        [
            'period'    => '08 ~ 10', 
            'starthour' => '08',
            'endhour'   => '10',
            'expire'    => false
        ]
        [
            'period'    => '10 ~ 12', 
            'starthour' => '10',
            'endhour'   => '12',
            'expire'    => false
        ]
    ]
  ]
]

Пример 2:

Если текущее время находится в диапазоне 2019-06-01 с 10:00 до 11:00

результат:

array:2 [▼
  0 => [
    'date' => '2019-06-01',
    "weekstr":"Saturday",
    "subdate":"06-01"
    'timelist' => [
        [
            'period'    => '08 ~ 10', 
            'starthour' => '08',
            'endhour'   => '10',
            'expire'    => true //Has passed 08:00 - 10:00 has expired, displayed as true
        ]
        [
            'period'    => '10 ~ 12', 
            'starthour' => '10',
            'endhour'   => '12',
            'expire'    => false
        ]
    ]
  ]
  1 => [
    'date' => '2019-06-02',
    "weekstr":"Saturday",
    "subdate":"06-01"
    'timelist' => [
        [
            'period'    => '08 ~ 10', 
            'starthour' => '08',
            'endhour'   => '10',
            'expired'   => false
        ]
        [
            'period'    => '10 ~ 12', 
            'starthour' => '10',
            'endhour'   => '12',
            'expired'   => false
        ]
    ]
  ]
]

Резюме: Для достижения этой функции у меня нет хорошей идеи в настоящее время.Я хочу попросить о помощи и дать мне некоторые идеи и методы, или я могу дать пример кода для моей справки.Спасибо.

Последняя ситуация

  • В соответствии с запросом, данным Фабианом Монтеро Родригесом, я реализовал обработку даты, но нет никакой хорошей идеи иметь дело спериод времени.

код:

$start_date   = Carbon::now();
$end_date     = Carbon::now()->addDays(2);
$date_periods = CarbonPeriod::create($start_date, $end_date);
$dates = [];
foreach ($date_periods as $key => $date){
    $dates[$key]['date']    = $date->format('Y-m-d');
    $dates[$key]['week']    = $date->localeDayOfWeek;
    $dates[$key]['subdate'] = $date->format('m-d');
}
dd($dates);

результат:

array:3 [▼
  0 => array:3 [▼
    "date" => "2019-05-31"
    "week" => "Friday"
    "subdate" => "05-31"
  ]
  1 => array:3 [▼
    "date" => "2019-06-01"
    "week" => "Saturday"
    "subdate" => "06-01"
  ]
  2 => array:3 [▼
    "date" => "2019-06-02"
    "week" => "Sunday"
    "subdate" => "06-02"
  ]
]

Текущая проблема

Диапазон дат былПодумайте о помощи, но просьба помочь мне

1 Ответ

0 голосов
/ 01 июня 2019

Поскольку я не совсем понимаю ваше требование, у меня есть отдельный маршрут в web.php

Внимание: будьте осторожны с настройкой часовых поясов.Установка неправильного часового пояса в config/app.php может привести к большому параметру expired.

И написать функцию закрытия:

    Route::any('/carbonintervaltest/', function () {
    $startDate   = Carbon::now();
    $endDate     = Carbon::now()->addDays(2);
    $dateRange = CarbonPeriod::create($startDate, $endDate);

    $dates = [];
    foreach ($dateRange as $dateKey =>  $date) {
        $dates[$dateKey]['date']    = $date->format('Y-m-d');
        $dates[$dateKey]['week']    = $date->localeDayOfWeek;
        $dates[$dateKey]['subdate'] = $date->format('m-d');
        $dates[$dateKey]['timelist'] = generateTime($date);
    }
    dd($dates);
});
function generateTime(Carbon $date)
{
    $startOfDay = $date->startOfDay();

    $eightTen = generateTwoHoursDifference($startOfDay, 8);

    $eightTenPeriod = getPeriod($eightTen);
    $tenTwelve = generateTwoHoursDifference($startOfDay, 10);
    $tenTwelvePeriod = getPeriod($tenTwelve);
    $totalTime = [$eightTenPeriod,$tenTwelvePeriod];
    return $totalTime;
}
function getPeriod(array $arrayObCarbonObj)
{
    foreach ($arrayObCarbonObj as $singleCarbonObj) {
        $eachHour[] = $singleCarbonObj->format('H');
    }
    $period = implode(' ~ ', $eachHour);
    $starthour = $eachHour[0];
    $endhour = $eachHour[1];
    $expired = !$arrayObCarbonObj['timeTwo']->isFuture();
    return   [
            'period'    => $period,
            'starthour' => $starthour,
            'endhour'   => $endhour,
            'expired'   => $expired
    ];
}
function generateTwoHoursDifference(Carbon $date, int $start, int $increment = 2)
{
    $dateFirstObj = (new Carbon)->parse($date->toDateTimeString());
    $dateSecondtObj = (new Carbon)->parse($date->toDateTimeString());
    $firstTime = $dateFirstObj->addHours($start);
    $secondTime = $dateSecondtObj->addHours($start+$increment);
    $allTime = ['timeOne' => $firstTime , 'timeTwo' => $secondTime];
    return $allTime;
}

Импортировать эти классы в web.php:

use Carbon\Carbon;
use Carbon\CarbonPeriod;

Вставьте код в верхнюю часть файла web.php и перейдите по маршруту

yourapp / carbonintervaltest

Таким образом, он даст результат dd, если результат будет То, что вы ищете.

Если вам неясно, я создал для этого Gist и вставил весь файл.

Если вы столкнулись с какой-либо проблемой, пожалуйста, оставьте комментарий ниже

https://gist.github.com/ManojKiranA/993383025928c285c30db6418e10708b

Вот результат дд

array:3 [▼
  0 => array:4 [▼
    "date" => "2019-06-01"
    "week" => "Saturday"
    "subdate" => "06-01"
    "timelist" => array:2 [▼
      0 => array:4 [▼
        "period" => "08 ~ 10"
        "starthour" => "08"
        "endhour" => "10"
        "expired" => true
      ]
      1 => array:4 [▼
        "period" => "10 ~ 12"
        "starthour" => "10"
        "endhour" => "12"
        "expired" => true
      ]
    ]
  ]
  1 => array:4 [▼
    "date" => "2019-06-02"
    "week" => "Sunday"
    "subdate" => "06-02"
    "timelist" => array:2 [▼
      0 => array:4 [▼
        "period" => "08 ~ 10"
        "starthour" => "08"
        "endhour" => "10"
        "expired" => false
      ]
      1 => array:4 [▼
        "period" => "10 ~ 12"
        "starthour" => "10"
        "endhour" => "12"
        "expired" => false
      ]
    ]
  ]
  2 => array:4 [▼
    "date" => "2019-06-03"
    "week" => "Monday"
    "subdate" => "06-03"
    "timelist" => array:2 [▼
      0 => array:4 [▼
        "period" => "08 ~ 10"
        "starthour" => "08"
        "endhour" => "10"
        "expired" => false
      ]
      1 => array:4 [▼
        "period" => "10 ~ 12"
        "starthour" => "10"
        "endhour" => "12"
        "expired" => false
      ]
    ]
  ]
]
...