时间段(PHP)

时间:2014-07-19 10:31:44

标签: php mysql time intervals

我试图找出Timeperiod是否在一个时间段内。我有我的参考时间段和比较时间段。 让我举个例子:

  • 时间段A(参考)从1.1.2014到1.2.2014(tt.mm.yyyy)。
  • 时间段B(比较)从2014年1月1日至2014年1月1.5日。

=>这完全可以。

  • 时间段C(参考)从1.1.2014到1.3.2014
  • 时间段D(比较)从1.2.2014到1.5.2014。

=>不行,因为D在C中。

我希望你得到我想要的东西。我试图制作serval< =>如果行动,但这开始变得巨大而缓慢。也许有更快的方法可以做到这一点。

此外,MySQL是否能够做到这一点?

4 个答案:

答案 0 :(得分:0)

你可以这样做:

检查Reference_start >= comparative_start && Reference_end < comparative_end,如果此条件成立,则您的时间将重叠。

答案 1 :(得分:0)

如果您有reference期(包含startDateendDate)并且您有comparative个句点,那么您可以在此where条款中使用MySQL的:

where ((reference.startDate > comparative.endDate) or reference.endDate < comparative.startDate)

如果两个时期没有交集,那将是真的。

答案 2 :(得分:0)

您可以使用php timestamp

尝试此操作
$reference_start_date = "1.1.2014";
$reference_end_date = "1.2.2014";

$comparative_start_date = "1.4.2014";
$comparative_end_date = "1.5.2014 ";

$reference_start_time = strtotime(str_replace(".", "-", $reference_start_date);
$reference_end_time = strtotime(str_replace(".", "-", $reference_end_date);

$comparative_start_time = strtotime(str_replace(".", "-", $comparative_start_date);
$comparative_end_time = strtotime(str_replace(".", "-", $comparative_end_date);

if($comparative_start_time>$reference_start_time && $comparative_start_time<$reference_end_time)
{
    echo "Not OK";
}
else if($comparative_end_time>$reference_start_time && $comparative_end_time<$reference_end_time)
{
    echo "Not OK";
}
else if($comparative_start_time<$reference_start_time && $comparative_end_time>$reference_end_time)
{
     echo "Not OK";
}
else
{
     echo "OK";
}

答案 3 :(得分:0)

假设您以UTC格式提供日期,则比较两个日期范围非常简单。有5个具体案例可能发生:

11111......
......22222

..11111.....
.....22222..

...11111....
...22222....

.....11111..
..22222.....

......11111
22222......

只有第一个和最后一个是您正在寻找的。构建if查询并否定它很容易:

if (!($dateRange1End <= $dateRangeStart2 && $dateRange2End <= $dateRange1Start))
    // NOT OKAY
else
    // OKAY