Как узнать количество дней между двумя днями не даты используя PHP?
Я знаю, как получить количество дней между двумя датами, но мои входные значения — это названия дней (дата не знает).
Входы / выходы:
Wednesday
а также Saturday
возвращается 3
Sunday
а также Wednesday
возвращается 3
Похоже, что ваша задача вообще не требует функций даты. Достаточно простого поискового массива.
Код: (демонстрация)
function daysUntil($start,$end){
$lookup=['Sunday'=>0,'Monday'=>1,'Tuesday'=>2,'Wednesday'=>3,'Thursday'=>4,'Friday'=>5,'Saturday'=>6];
$days=$lookup[$end]-$lookup[$start];
return "From $start to $end: ".($days<1?$days+7:$days);
}
echo daysUntil('Wednesday','Saturday'),"\n"; // Thursday, Friday, Saturday
echo daysUntil('Monday','Friday'),"\n"; // Tuesday, Wednesday, Thursday, Friday
echo daysUntil('Thursday','Thursday'),"\n"; // [assumed next week]
echo daysUntil('Friday','Monday'),"\n"; // Saturday, Sunday, Monday
echo daysUntil('Saturday','Sunday'),"\n"; // Sunday
echo daysUntil('Sunday','Saturday'),"\n"; // Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
echo daysUntil('Sunday','Wednesday'); // Monday, Tuesday, Wednesday
Выход:
From Wednesday to Saturday: 3
From Monday to Friday: 4
From Thursday to Thursday: 7
From Friday to Monday: 3
From Saturday to Sunday: 1
From Sunday to Saturday: 6
From Sunday to Wednesday: 3
Или вы можете заменить массив поиска четырьмя вызовами функций:
$days=date('w',strtotime($end))-date('w',strtotime($start));
http://sandbox.onlinephpfunctions.com/code/b349aae527654d25a3dbd92df2a3dde386ca423a
Используйте PHP date_diff()
функция (документы).
$datetime1 = date_create($date_1);
$datetime2 = date_create($date_2);
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%d'); // For days
Согласно уточнению, вы можете создать произвольные субботы и среды для расчета:
$datetime1 = date_create(date('Y-m-d',strtotime('wednesday')));
$datetime2 = date_create(date('Y-m-d',strtotime('saturday')));
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%d'); // For days
Вернул бы «3», но в зависимости от того, когда вы его запустили.
Вы можете написать название дня для анализа в новом классе DateTime:
<?php
$datetime1 = new DateTime('Sunday');
$datetime2 = new DateTime('Wednesday');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
?>
Также ниже однострочной версии:
echo (new DateTime('Sunday'))->diff(new DateTime('Wednesday'))->format('%a days');
public function numOfDaysBetween($start,$end)
{
$days=[0=>'Saturday',1=>'Sunday',2=>'Monday',3=>'Tuesday',4=>'Wednesday',5=>'Thursday',6=>'Friday'];
$index_start=array_search($start, $days);
$index_end=array_search($end, $days);
if($index_start==$index_end)
{
return 7;
}else if($index_start<$index_end)
{
return $index_end-$index_start;
}else
{
return 7-($index_start-$index_end);
}
}