【问题标题】:PHP DateTime Subtraction and ConversionPHP DateTime 减法和转换
【发布时间】:2013-11-02 06:21:55
【问题描述】:

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

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

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

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

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

  • 假设考试的截止日期等于时间戳的日期,并且在考试期间(我之前执行了2次检查),我想检查当前时间与结束时间之间的差异是否考试时间小于规定时间。如果距离考试结束的时间少于时间限制,我想将该时间量设置为新的时间限制。我的前端期望我的结果采用 HH:mm:ss 形式(php 的等价物是 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 还很陌生,我承认我意识到这可能是一个奇怪的问题,但这就是小组决定采用的方式。

【问题讨论】:

  • 我认为没有更好的方法,你可以使用 Datetime 类,但我认为没有必要更好
  • 我会通过数据库来完成这一切。有很多函数可以进行这种计算而无需担心转换。
  • Did you check this ?没有阅读您的完整问题。

标签: php datetime strtotime


【解决方案1】:

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

【讨论】:

  • 数据库因素当然看起来应该首先从调试中消除。我同意将变量打印出来将使正在发生的事情更加清晰。也许在尝试之后,@Eric 还可以尝试使用一些本地定义的时间值而不是从数据库加载的代码。
  • 为了确保正确使用 strtotime(),我确实对所有 3 个变量分别执行了该函数,然后使用 date('H:i:s', strtotime(whatever time variable)) 以查看它是否正确转换回来。对于所有 3 个单独的时间,我打印了原始值、strtotime 值和转换回来,对于所有 3 个单独的时间,它都正确转换。只是当我减去两个 strtotime 值并尝试转换时,它会导致问题。
  • @perfectist 我尝试使用一些局部变量来测试我是否正确使用了该函数,并且在减法后问题仍然存在。我有: $time1 = strtotime('15:30:00') - strtotime('07:15:00');产生 29700。然后,我设置: $time2 = date('H:i:s', $time1);产生 03:15:00。我希望输出为 08:15:00(15:30:00 - 07:15:00)。这个假设是否正确,或者我可能不理解这个函数的本质?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2013-08-06
  • 2023-03-04
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多