PHP比较字符串

时间:2013-04-18 17:11:49

标签: php string comparison

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

---------------------------------
| 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 |
---------------------------------

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

$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仍处于活动状态。

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

摘要:如何比较两个字符串,包含日期或时间,以确定项目是否有效?

2 个答案:

答案 0 :(得分: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.";
}

答案 1 :(得分: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