【发布时间】:2019-01-18 16:01:59
【问题描述】:
我有一个非常复杂的交付情况,其中一个 switch 语句正在检查星期几和每天 16:00 的截止时间,并回显交付日,周一、周二和周三是今天 + 1 天,如果切断后它应该与今天的日期 + 2 相呼应,由于周末没有交货,因此星期四和星期五的交货日期完全不同
<?php
$today = date("D");
switch($today){
case "Mon":
if(mktime(16, 0, 0) <= time()) {
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 2 days')) . "</strong><p>";
} else {
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 1 days')). "</strong><p>";
}
break;
case "Tue":
if(mktime(16, 0, 0) <= time()) {
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 2 days')). "</strong><p>";
} else {
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 1 days')). "</strong><p>";
}
break;
case "Wed":
if(mktime(16, 0, 0) <= time()) {
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 2 days')). "</strong><p>";
} else {
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 1 days')). "</strong><p>";
}
break;
case "Thu":
if(mktime(16, 0, 0) <= time()) {
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 4 days')). "</strong><p>";
} else {
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 1 days')). "</strong><p>";
}
break;
case "Fri":
if(mktime(16, 0, 0) <= time()) {
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 5 days')). "</strong><p>";
} else {
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 4 days')). "</strong><p>";
}
break;
case "Sat":
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 4 days')). "</strong><p>";
break;
case "Sun":
echo "<p>For Delivery on <strong> " . date('D jS', strtotime($Date. ' + 3 days')). "</strong><p>";
break;
default:
echo "No information available for that day.";
break;
}
?>
当然,它们一定是实现这一目标的更优雅的方式,任何人都知道实现相同结果的更清洁的方式吗?此代码有效,但可能会更好更短
【问题讨论】:
-
对于任何代码,重要的是查看通用代码,看看是否可以仅提取差异。有很多代码只有
' + 5 days'之类的不同 -
您可以使用
date('N')或W获取一个数字,检查并添加到该数字。 -
应该是周六 3 天和周日 2 天?
标签: php switch-statement