使用PHP if语句帮助验证日期/时间

时间:2011-03-07 05:05:10

标签: php

我一直在阅读PHP文档,但是我已经碰壁了。 PHP新手。

这个脚本的想法非常简单: 星期一,星期二上午10点之前星期三 - 订货当天发货。星期一上午10点以后订购船舶。周四,周五,周六和周日全天 - 周一订购船只

我正在尝试检查一周中的哪一天和一天中的时间告诉用户他们的订单何时发货。我发现当整个上午10点的$current_time = date("H");时,我得到一个显示所有三个选项的错误:

  • 您的订单将于今天发货。
  • 您的订单明天将发货。
  • 您的订单将在星期一发货。

我确信这是因为我的陈述写得不好。

然后我继续使用date("H:i");,但无济于事。我知道我写这样的东西可能有点不对劲:

else if ($d < 4 && $current_time >= 10:00) {

来源:

<?
    $current_time = date("H:i");
    $d = date("N");

    if ($d > 3) {
        echo('<p>your order will ship monday</p>');
    }
    else
        if ($d < 4 && $current_time >= 10:00) {
            if ($d = 1 && $current_time <= 10:00 || $d = 2 && $current_time <= 10:00) {
                echo('<p>your order will ship today.</p>');
            }

            if ($d = 1 && $current_time >= 10:01 || $d = 2 && $current_time >= 10:01) {
                echo('<p>your order will ship tomorrow.</p>');
            }

            if ($d = 3 && $current_time <= 10:00) {
                echo('<p>your order will ship monday.</p>');
            }
        }
?>

我确信这可能会减少很多。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

$current_time >= 10:00 will not work, it will give parse error of :

使用

date("H") >= 10 && date("i") >= 0  // hours and miutes

与其他比较类似。

答案 1 :(得分:2)

您没有有效的语法,您无法在PHP中比较10:00 ...

一个简单的替代方法是使用:

$current_time = date('Hi')

然后比较如下:

$current_time >= 1000

没有冒号。

我也认为你可能会因为对逻辑过于聪明而感到困惑。如果规则发生变化,那么代码将难以理解和维护。

这是一个非常简单易读的替代方案:

<?php
    class ShipDate {
        const TODAY = '<p>your order will ship today</p>';
        const TOMORROW = '<p>your order will ship tomorrow</p>';
        const MONDAY = '<p>your order will ship monday</p>';
    }

    $time = date('Hi');
    switch (date('l')) {
        case 'Monday':
        case 'Tuesday':
            if ($time < 1000)
                echo ShipDate::TODAY;
            else
                echo ShipDate::TOMORROW;
            break;
        case 'Wednesday':
            if ($time < 1000)
                echo ShipDate::TODAY;
            else
                echo ShipDate::MONDAY;
            break;
        default:
            echo ShipDate::MONDAY;
            break;
    }

虽然代码更长,但是查看代码的规则非常明显,不需要注释。

答案 2 :(得分:1)

您应该使用PHP strtotime()函数将日期字符串转换为整数,您可以将其与使用time()检索的当前时间整数值进行比较。

答案 3 :(得分:1)

比较10:00是无效的语法。

尝试将当前时间更改为

$current_time = date("Hi")

然后删除':'并比较

$current_time >= 1000

如果您是PHP新手,想要轻松上课等,可以使用简单的开关,如:

<?php
 $time = date("Hi"); 
 $day = date("N"); //sets a numeric value monday = 1 etc

switch ($day) {
    case 1:
        if ($time < 1000)
            {echo "Your order will ship today";}
        else
            {echo "Your order will ship tomorrow";}
        break;
    case 2:
        if ($time < 1000)
            {echo "Your order will ship today";}
        else
            {echo "Your order will ship tomorrow";}
        break;
    case 3:
        if ($time < 1000)
            {echo "Your order will ship today";}
        else
            {echo "Your order will ship Monday";}
        break;
    default:   
        echo "Your order will ship Monday"; //if none of the above match
}
?>