我有两次需要存储到数据库中。时间格式为hh:mm:ss,无日期。这些时间可以由系统上的用户更改。一个是时间,另一个是休息时间。休息时间应始终大于24小时内的时间。
这是我遇到麻烦的部分。我不想限制用户在午夜之前选择时间以使所有内容保持在相同的“每日”周期中,因此我希望能够在逻辑上确定用户的时间是否仅在24小时内,然后测试开启时间总是少。
有人可以帮我解决这个问题吗?有很多时间和日期功能,我真的不知道我需要做哪个;另外,我不清楚我应该如何测试它。
我开始认为没有包含日期就没有办法测试。只是时间不够。
答案 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)
用户可以选择获取报告 在一个时间窗口交付。该 用户可以选择报告 从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
}