PHP switch语句回显交付日

时间:2019-01-18 16:02:00

标签: php switch-statement

我有一个非常复杂的交货情况,有一个转换语句,该语句检查一周中的某天,每天的截止时间为16:00,并且回显了周一,周二和周三为今天+ 1天的交货日邮寄截止日期应该与今天的日期+ 2相呼应,由于周末不发送邮件,因此,星期四和星期五的发送日期完全不同

$(".modal-backdrop").fadeOut()
$("#formId").removeClass('.modal-backdrop')

毫无疑问,他们必须是实现这一目标的一种更为优雅的方法,任何人都知道实现同一结果的一种更清洁的方法。该代码有效,但可能会更好

3 个答案:

答案 0 :(得分:2)

请注意,您可以堆叠case个匹配项来完成相同的操作:

switch ($today) {
    case 'Mon':
    case 'Tue':
    case 'Wed':
        // code here
        break;
}

但是,最好只制作一个包含当日所需值的小数组,然后使用日期名称作为数组索引来查找今天的值:

$leadtimes = [
    'Mon' => [1, 2], // first value is for before 16:00, second is for after
    'Tue' => [1, 2],
    'Wed' => [1, 2],
    'Thu' => [1, 4],
    'Fri' => [4, 5],
    'Sat' => [4, 4],
    'Sun' => [3, 3],
];

然后,用于计算提前期的代码只有一行:

$leadtime = $leadtimes[date('D')][date('H') < 16 ? 0 : 1];

然后将其插入到您的输出中,如上所示:

echo
    "<p>For Delivery on <strong> " .
    date('D jS', strtotime("$Date + $leadtime days")) .
    "</strong><p>";

现在,当您要更改交货时间时,无需编写任何代码,只需调整数组中的值即可。

由于我做任何代码高尔夫已经有一段时间了,所以整件事都在一行上:

echo date('D jS',strtotime('+'.['Mon'=>[1,2],'Tue'=>[1,2],'Wed'=>[1,2],'Thu'=>[1,4],'Fri'=>[4,5],'Sat'=>[4,4],'Sun'=>[3,3]][date('D')][date('H')<16].'day'));

答案 1 :(得分:1)

一个快速的尝试就是我在注释中提到的,删除重复的代码,这既是用于回显的字符串,又是能够组织切换的函数,因此任何具有共同值的日子都由同一代码处理...

var string = 'Item 1Item 2Item 3Item 4Item NItem N-1';
var arr = [];
var i = string.indexOf('Item', 1);
while (i >= 0) {
  arr.push(string.substr(0, i));
  string = string.substr(i);
  i = string.indexOf('Item', 1);
}
arr.push(string);
console.log(arr);

答案 2 :(得分:0)

如何?

$today = date("D");
$cutoff = mktime(16, 0, 0) <= time();

$offset = $cutoff ? 2 : 1;
$offset = $cutoff and $today === 'Thu' ? 4 : 1;
$offset = $cutoff and $today === 'Fri' ? 5 : 4;
$offset = $today === 'Sat' ? 4 : $offset;
$offset = $today === 'Sun' ? 3 : $offset;

echo "<p>For Delivery on <strong> " . date('D jS', strtotime("$Date $offset days")) . "</strong><p>";

我也建议使用Carbon处理日期。