如何确保一次总是小于另一次

时间:2010-01-03 07:26:37

标签: php

我有两次需要存储到数据库中。时间格式为hh:mm:ss,无日期。这些时间可以由系统上的用户更改。一个是时间,另一个是休息时间。休息时间应始终大于24小时内的时间。

这是我遇到麻烦的部分。我不想限制用户在午夜之前选择时间以使所有内容保持在相同的“每日”周期中,因此我希望能够在逻辑上确定用户的时间是否仅在24小时内,然后测试开启时间总是少。

有人可以帮我解决这个问题吗?有很多时间和日期功能,我真的不知道我需要做哪个;另外,我不清楚我应该如何测试它。


我开始认为没有包含日期​​就没有办法测试。只是时间不够。

3 个答案:

答案 0 :(得分:2)

时间总是在24小时内,所以如果用户放置01:00/03:00他会持续2小时 如果他在03:00/01:00写作,他会持续22个小时。

我没有看到问题。

答案 1 :(得分:1)

任何两次hh:mm:ss格式将在 24小时的时间段内,如您所述。因此,除非您实际存储日期,否则我不确定您是如何做到这一点的。

如果我理解正确,你应该接受23:00:00的开始时间和04:00:00的结束时间(这仅仅意味着5小时的工作班次)?如果这是可以接受的,那么你能给我一个不可接受的输入的例子吗?

也许您想检查结束时间是否在开始时间的12小时内?这应该是可行的。

答案 2 :(得分:1)

OP在评论中写道:

  

用户可以选择获取报告   在一个时间窗口交付。该   用户可以选择报告   从23:00:00到窗口交付   01:00:00他们可能会决定   明天那个时间不再存在了   好,并改为23:0:00至   05:00:00或类似的东西。我   遗失了什么?

时间定义部分没有问题。您可能希望使用发送报告的代码。

// current time
$timeNow = time();

// fetch user time options from database
$timeOn = [from the database];
$timeOff = [from the database];

// convert times to seconds from epoch
$timeOn = strtotime($timeOn);
$timeOff = strtotime($timeOff);

// if database time is in timestamp format,
// only the hour, minutes and second information is needed
$timeOn = mktime(date("H", $timeOn), date("i", $timeOn), date("s", $timeOn));
$timeOff = mktime(date("H", $timeOff), date("i", $timeOff), date("s", $timeOff));

// if time on is higher than time off, time on is of yesterday
if($timeOn > $timeOff){
    $timeOn = strtotime("-24 hour", $timeOn);
}

// decide on report sending
if($timeNow >= $timeOn && $timeNow <= $timeOff){
    // Send report
} else {
    // Do not send report or reschedule the report
}