как получать все дни между 2 датами в laravel

#php #laravel

#php #laravel

Вопрос:

учтите, что у меня есть 2 даты, как показано ниже, на мой взгляд :

 {{$property->start_date }} //which is for example 3/20/219
  

и другую дату

 {{$property->end_date }} //which is for example 3/28/219
  

теперь я хочу каким-то образом напечатать эти 8 дней разницы как 8 col-lg-1, как показано в приведенном ниже коде

 @while($property->start_date  <= $property->end_date)

//here i want to print dates in col-lg-1 i dont know how to access the day and if the while loop is working right or no
  

как я могу добиться этого в blade, учитывая, что я делаю это, на мой взгляд, и разумно ли вообще делать это в view или нет.

Комментарии:

1. Существует способ, называемый strtotime

2. Я знаю, WordPress часто это делает. Но… Не подавляйте предупреждения: @while

Ответ №1:

Вы можете использовать CarbonPeriod из Carbon

что-то вроде этого

 $ranges = CarbonPeriod::create('2019-03-01', '2019-03-31');
  

Для печати каждой даты вы можете использовать цикл

 foreach ($ranges as $date) {
    echo $date->format('Y-m-d');
}
  

Или вы также можете преобразовать его в массив

 $dates = $ranges->toArray();
  

Комментарии:

1. большинство ответов сработало бы, но это форма laravel, и в ней также отображается текущий выбранный день, который я искал!! спасибо @punit gajjar

2. @Farshad, рад помочь!

Ответ №2:

Возвращает все даты между двумя датами в php:

Используя DatePeriod и DateTime :

 $begin = new DateTime($property->start_date); // your start date 2019-03-20
$begin = $begin->modify( ' 1 day' );
$end = new DateTime($property->end_date); // your end date 2019-03-28

$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval ,$end);

foreach ($daterange as $date) {
    echo '<pre>'.$date->format('Y-m-d').'<pre>'; 
}
  

Вывод:

 2019-03-21
2019-03-22
2019-03-23
2019-03-24
2019-03-25
2019-03-26
2019-03-27
  

Используя strtotime :

 // Declare two dates 
$Date1 = $property->start_date; // 2019-03-20
$Date2 = $property->end_date; // 2019-03-28

// Declare an empty array 
$array = array(); 

// Use strtotime function 
$start = strtotime($Date1. ' 1 day'); 
$end = strtotime($Date2. '-1 day'); 

// Use for loop to store dates into array 
// 86400 sec = 24 hrs = 60*60*24 = 1 day 
for ($currentDate = $start; $currentDate <= $end; $currentDate  = (86400)) { 

    $Store = date('Y-m-d', $currentDate); 
    $array[] = $Store; 
} 

// Display the dates in array format
echo '<pre>';
print_r($array);
echo '<pre>';
  

Вывод:

 Array
(
    [0] => 2019-03-21
    [1] => 2019-03-22
    [2] => 2019-03-23
    [3] => 2019-03-24
    [4] => 2019-03-25
    [5] => 2019-03-26
    [6] => 2019-03-27
)
  

Я надеюсь, что это было бы полезно.

Комментарии:

1. хорошо, спасибо, я дам вам знать, когда попробую это, и вопрос в том, могу ли я посчитать дни с датой между этими 2?? например, я хочу распечатать вот так 3/27/2019 — 3/28/2019 / 3-29-2019 как эти сортируют разницу в днях между 2

2. Вы хотите напечатать полные даты вместо подсчетов?

3. @InzamamIdrees , OP хочет этого с Laravel, где я бы предложил использовать Carbon вместо DateTime. 🙂

4. @PunitGajjar да, но carbon просто указывает количество разных дней, нет?? я не смог получить такие дни с помощью carbon или я не знаю способа: D

5. @Farshad попробуйте strtotime или DateTime получить массивы дат между двумя датами.

Ответ №3:

Если вы хотите получить разницу в дате, вы можете использовать Carbon и diffInDays .

 $date1 = Carbon::parse($property->start_date);
$date2 = Carbon::parse($property->end_date );

$diff = $date1->diffInDays($date2);
dd($diff);
  

Комментарии:

1. Это лучше сделать в контроллере и отправить данные для просмотра вместе со всеми вашими необходимыми данными . Я думаю, это лучше

Ответ №4:

Вы можете попробовать это напрямую в шаблоне (только если нет способа или сложно передать его из контроллера в view)

 @php
    $date1 = CarbonCarbon::parse('2019-01-31 10:15:23');
    $date2 = CarbonCarbon::parse('2019-02-15 10:15:23');
    $diff = $date1->diffInDays($date2);
@endphp

<div>{{$diff}}</div>
  

но если вы сделаете это в контроллере и отправите его в шаблон, было бы лучше

Комментарии:

1. спасибо, но это покажет количество разных дней, хотя я хочу отсортировать разницу в днях 2019-03-21 2019-03-22 2019-03-23 следующим образом

2. хорошо, тогда вам следует попробовать CarbonPeriod , проверьте эту ссылку carbon.nesbot.com/docs/#api-period