2

我为表中的每个项目存储了日期和时间戳,格式分别为月/日/年/小时/分钟。拓扑如下所示:

---------------------------------
| Name  | ID | Date     | Time  |
---------------------------------
| Item1 | 1  | 04.15.13 | 09.17 |
---------------------------------
| Item2 | 2  | 04.17.13 | 12.58 |
---------------------------------
| Item3 | 3  | 04.18.13 | 22.43 |
---------------------------------

等等。使用 PHPdate()函数,我检索服务器的当前日期和时间,如下所示:

$date = date(m) . "." . date(d) . "." . date(y);
$time = date(H) . "." . date(i);

在写这篇文章时,这会给我$date = "04.18.13"$time = "19.05".

如果当前日期和时间超过了为我的数据库中的特定项目存储的日期和时间,我希望在用户浏览它时将该项目标记为过时/不活动。例如:

  • 如果是 4 月 16 日 11.05,Item1 处于非活动状态,但 Item2 和 Item3 仍处于活动状态。
  • 如果是 4 月 17 日 13.02,Item1 和 Item2 处于非活动状态,但 Item3 仍处于活动状态。
  • 如果是 4 月 18 日 20.38,Item1 和 Item2 处于非活动状态,但 Item3 仍处于活动状态。

如果像这样的简单运算符可以为此工作,我会完全迷失>, <, >=, <=,因为我正在使用字符串。如何比较从数据库中检索到的日期和时间与当前日期和时间?

摘要:如何比较两个字符串,保存日期或时间,以确定项目是否处于活动状态?

4

2 回答 2

2

DateTime您应该从您的字符串创建对象。像这样:

# I assume that you've fetch date and time from mysql already
$time_from_db = DateTime::createFromFormat('m.D.y H.i',
             $mysql_record['date'] . ' ' . $mysql_record['time']);

$now = new DateTime();

# as of php 5.2.2, DateTime objects can be compared using the <> == operators
if($now >= $time_from_db) {
    echo "it's in the past.";
}
于 2013-04-18T17:16:00.197 回答
2

如果您在 MySQL 中将两个字段合并为一个DATETIME字段,则此任务将很简单,并且可以在查询本身中执行。

您的表格可能如下所示:

------------------------------------
| Name  | ID | active_until        |
------------------------------------
| Item1 | 1  | 2013-04-15 09:17:00 |
------------------------------------
| Item2 | 2  | 2013-04-17 12:58:00 |
------------------------------------
| Item3 | 3  | 2013-04-18 22:43:00 |
------------------------------------

你可以像这样查询它

Active Listings:
----------------
SELECT * FROM table WHERE active_until >= NOW()

Inactive Listings:
------------------
SELECT * FROM table WHERE active_until < NOW()

All listings with active/inactive indicator:
--------------------------------------------
SELECT
    *,
    (CASE WHEN active_until >= NOW() THEN 'active' ELSE 'inactive' END CASE) as `status`
FROM table
于 2013-04-18T17:24:55.190 回答