【问题标题】:How to compare if the time between two dates is between two other dates?如何比较两个日期之间的时间是否在另外两个日期之间?
【发布时间】:2019-03-25 18:16:46
【问题描述】:

我想比较 $begin 和 $end 之间的时间是否在 starttime 和 endtime 之间。

我的表格布局如下:

id - name - starttime(in datetime) - endtime (in datetime)

表格中的示例条目:

32 - 测试 - 25.03.2019-5:00pm - 25.03.2019-6:15pm

例子:

$开始:下午 4:45
$结束:下午 6:30

这个例子应该给我 id 32 的条目,因为 $begin 和 $end 之间的时间块已经在我的表中!

SELECT * FROM timetable WHERE FROM_UNIXTIME($begin) BETWEEN starttime AND endtime OR FROM_UNIXTIME($end) BETWEEN starttime AND endtime 

【问题讨论】:

  • 这个查询返回什么?请分享一些输出。
  • 查询应该返回时间在$begin和$end之间的条目...在我的例子中,它必须返回表中的示例条目(id 32)
  • 我明白......当你运行这个你写的查询时询问结果......它返回了什么?
  • 您是否以这种格式保存日期时间25.03.2019-5:00pm
  • 不,我将其保存为 SQL 中的正常日期时间格式,但我来自德国,并且在美国或印度还有其他日期格式...当前查询的结果为空,因为他只检查 $begin 是否在 starttime 和 endtime 之间或 $end 在 starttime 和 endtime 之间但他还应该检查 $begin 和 $end 之间的时间是否在 starttime 和 endtime 之间!

标签: php mysql timestamp


【解决方案1】:

正如您在 cmets 中所说,您在 UNIX_TIMESTAMP 中有 beginend 值,所以这里有一个查询来检查是否获得所需的输出:

试试这个:

SELECT * 
FROM timetable 
WHERE $begin >= UNIX_TIMESTAMP(`starttime`)
AND $end <= UNIX_TIMESTAMP(`endtime`) 
AND $begin < $end

工作原理:

$begin >= UNIX_TIMESTAMP(`starttime`)

它检查开始时间是否大于或等于数据库中保存的开始时间。

$end <= UNIX_TIMESTAMP(`endtime`) 

它检查结束时间是否小于或等于数据库中保存的结束时间。

$begin < $end

它检查结束时间是否大于开始时间。

希望这会有所帮助:)

【讨论】:

  • 嘿,我试过了,但它不起作用!在我的表中,有一个条目,例如 starttime = "2019-03-26 11:00:00" AND endtime ="2019-03-26 12:15:00" AND my $begin is "1553593500" and my $end =“1553598000”它什么也没给我,但它应该返回上述条目
  • @itranger 我已经更新了答案。请立即尝试,并确保将您在 cmets 中提到的 UNIX_TIMESTAMP 值作为开始和结束值传递。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多