【发布时间】:2018-04-20 00:11:05
【问题描述】:
如何使用 PHP 查找两天之间的天数不是日期?
我知道如何获取两个日期之间的天数,但我的输入值是日期名称(不知道日期)。
输入/输出:
Wednesday 和 Saturday 返回 3
Sunday 和 Wednesday 返回 3
【问题讨论】:
标签: php date dayofweek date-difference
如何使用 PHP 查找两天之间的天数不是日期?
我知道如何获取两个日期之间的天数,但我的输入值是日期名称(不知道日期)。
输入/输出:
Wednesday 和 Saturday 返回 3
Sunday 和 Wednesday 返回 3
【问题讨论】:
标签: php date dayofweek date-difference
您的任务似乎根本不需要日期函数。一个简单的查找数组就足够了。
代码:(Demo)
function daysUntil($start, $end) {
$lookup = [
'Sunday' => 0,
'Monday' => 1,
'Tuesday' => 2,
'Wednesday' => 3,
'Thursday' => 4,
'Friday' => 5,
'Saturday' => 6
];
$days = $lookup[$end] - $lookup[$start] + ($lookup[$end] <= $lookup[$start] ? 7 : 0);
return "{$days} days from {$start} to {$end}\n";
}
echo daysUntil('Wednesday', 'Saturday'); // Thursday, Friday, Saturday
echo daysUntil('Monday', 'Friday'); // Tuesday, Wednesday, Thursday, Friday
echo daysUntil('Thursday', 'Thursday'); // [assumed next week]
echo daysUntil('Friday', 'Monday'); // Saturday, Sunday, Monday
echo daysUntil('Saturday', 'Sunday'); // Sunday
echo daysUntil('Sunday', 'Saturday'); // Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
echo daysUntil('Sunday', 'Wednesday'); // Monday, Tuesday, Wednesday
输出:
3 days from Wednesday to Saturday
4 days from Monday to Friday
7 days from Thursday to Thursday
3 days from Friday to Monday
1 days from Saturday to Sunday
6 days from Sunday to Saturday
3 days from Sunday to Wednesday
或者您可以用 4 个函数调用替换查找数组并达到相同的结果:(Demo)
function daysUntil($start, $end) {
$days = date('w', strtotime($end)) - date('w', strtotime($start));
$days += $days < 1 ? 7 : 0;
return "{$days} days from {$start} to {$end}\n";
}
【讨论】:
使用 PHP date_diff() 函数 (docs)。
$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');
【讨论】: