PHP DateTime减法和转换

时间:2013-11-02 06:21:55

标签: php datetime strtotime

我很难清楚地表达我在标题中遇到的问题,但现在的情况是:我正在研究一个三层考试网站的后端。我目前正在更新学生申请考试时使用的功能。考试有开始和结束日期和时间,以及时间限制。我想要做的是特定于考试期间剩余的时间少于考试时间的情况,例如,考试时间在下午5:00结束。现在时间是下午4:30。考试时间限制是一个半小时。我想用30分钟替换一个半小时的限制。要做到这一点,我需要3个日期,我将解释如何获得每个日期:

  • 我的功能页面的时间戳。当控制器调用我的页面时,在打开会话后,我将默认时区设置为America / New York(我的区域)。要获取时间戳,我使用代码:

    $ date = date(' Y-m-d H:i:s');

    $ currenttime = date(' H:i:s',strtotime($ date));

  • 我使用函数调用我的数据库来获取时间限制和考试结束的时间(我还使用其他比较的日期来检查考试的可用性)。考试结束时间存储在结果数组$ res [10]中,时间限制在$ res [11]。

  • 假设考试的截止日期等于时间戳的日期,并且它在考试期间(我之前执行了2次检查),我想检查当前时间与考试结束时间不到时限。如果考试结束前的时间小于时间限制,我想将该时间量设置为新的时间限制。我的前端希望我的结果形式为HH:mm:ss(php' s等价物是H:i:s)。因此,如果考试结束前有30分钟且时间限制是一个半小时,我希望新的时间限制为30分钟(或00:30:00)。我的代码目前无法正常工作。我符合if语句的标准,这是我想要的结果。当我将它转换为H:i:s时,问题就出现了(我一直在19:00:00左右得到结果)。我读过的每篇文章都建议这样做,但我可能会遗漏一些东西。

    $compareTime = strtotime($res[10]) - strtotime($currenttime);
    
    if(compareTime < strtotime($res[11]){
    
        $timelimit = date('H:i:s', $compareTime);
    
    }else{
    
        $timelimit = $res[11];
    
    }
    

如果有更好的方法,我将不得不知道。我对php很新,而且我承认这可能是一个奇怪的问题,但这就是小组决定采用的方式。

1 个答案:

答案 0 :(得分:1)

也许是因为数据库和PHP服务器使用不同的时区。通过打印这些变量来查看它们的值。