【问题标题】:Check if the range time is 30 minutes before and after a new day检查范围时间是否为新一天前后的 30 分钟
【发布时间】:2020-09-16 02:16:41
【问题描述】:

我将日期和时间分别存储在表的不同列中。所以我正在尝试检查当前时间是否比数据库中的时间早或晚了 30 分钟。

假设我有一个这样存储的日期和时间列表:

日期         | 时间
2020-05-29          00:10:00
2020-05-29          09:00:00

如果我当前的日期是2020-05-28,时间是23:50:00,那么最近的日期和时间应该是第一行2020-05-29, 00:10:00,范围应该是2020-05-28, 23:35:00 - 2020-05-29, 00:35:00

我已经完成了代码,但它只能检测同一日期的时间范围。

$currentTime = time();
$minTime     = date("H:i", strtotime('-30 minutes', $currentTime));
$maxTime     = date("H:i", strtotime('+30 minutes', $currentTime));

// My query to get the list of date and time on one specific date and populate to $datetimeArr
// $sql = 'SELECT id, date, time FROM table WHERE date = "'.date('Y-m-d').'"';

$datetimeArr = [
    [
        'date' => '2020-05-29',
        'time' => '00:10:00'
    ],
    [
        'date' => '2020-05-29',
        'time' => '09:00:00'
    ],
];

foreach ($datetimeArr as $k => $row) {
    if($row['time'] >= $minTime && $row['time'] <= $maxTime) {
        $nearestDate = $row;
        continue;
    }
}

所以问题是,如果在新的一天之后的 30 分钟之前,我无法正确获取范围。

【问题讨论】:

  • 不要使用字符串,使用strtotime整数值。也许像 strtotime($row['date'] . ' ' . $row['time']) &gt;= time() - 1800 || strtotime($row['date'] . ' ' . $row['time']) &lt;= time() + 1800 之类的东西可以根据需要更改操作.. 也可能希望在操作之外存储 time 以便它在执行期间不计算。
  • @user3783243 试试看,谢谢!

标签: php codeigniter datetime range


【解决方案1】:

为什么不使用获取数据的 mysql 查询来执行此操作?这将比使用 php foreaches 更简单。

SELECT * FROM `TABLE` WHERE `time` > DATE_SUB(NOW(), INTERVAL 30 MINUTE) AND `time` < DATE_ADD(NOW(), INTERVAL 30 MINUTE)

为您的案例更新一个古怪的解决方案:

SELECT * from TableName where CONCAT(date, ' ', time) between DATE_SUB(NOW(), INTERVAL 30 MINUTE) and DATE_ADD(NOW(), INTERVAL 30 MINUTE)

这会将日期和时间字段连接成一个日期时间。

【讨论】:

  • @user3783243 绝对。它的代码更简单,工作效率更高。
  • @MitkoDelibaltov 日期呢?如果是在新的一天之前或之后 30 分钟?因为由于某种原因,我无法将日期和时间合并在一起。
  • @MitkoDelibaltov 啊,我明白了。它实际上是在做这项工作。谢谢!
  • 嗨,Leon 这是一个很奇怪的解决方案,但它应该对你有用。这包含日期和时间,就好像它们在一起一样,然后进行检查。 SELECT * from TableName where CONCAT(date, ' ', time) 在 DATE_SUB(NOW(), INTERVAL 30 MINUTE) 和 DATE_ADD(NOW(), INTERVAL 30 MINUTE) 之间
猜你喜欢
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
相关资源
最近更新 更多