【发布时间】:2011-10-31 03:19:32
【问题描述】:
日期字符串如下所示
2011-08-19 17:14:40
(年-月-日时:分:秒)
如何知道日期是否早于当前日期超过 30 天?
【问题讨论】:
标签: php string datetime date time
日期字符串如下所示
2011-08-19 17:14:40
(年-月-日时:分:秒)
如何知道日期是否早于当前日期超过 30 天?
【问题讨论】:
标签: php string datetime date time
尝试使用这样的东西:
if(strtotime('2011-08-19 17:14:40') < strtotime('-30 days')) {
// this is true
}
此外,这个字符串看起来像是作为日期时间/时间戳字段存储在 SQL 中。您可以使用以下方法直接从数据库中选择所有具有旧日期的条目:
SELECT ... WHERE `datetime` + INTERVAL 30 DAY < NOW()
【讨论】:
strtotime('2011-08-19 17:14:40') + 30 * 24 * 60 * 60 < time();
【讨论】:
strtotime('2011-08-19 17:14:40') + 30 * 24 * 60 * 60 < time(); 更正吧。
24 * 60 * 60 计算通常是个坏主意,因为在处理夏令时等问题时它们可能会变得不准确。最好使用 RiaD 建议的东西,让strtotime() 处理相对时间计算。
30 * 24 * 60 * 60 永远是 30 days,无论你在宇宙的哪个角落。
您可以按如下方式使用 Carbon
if (30 - ((new \Carbon\Carbon($given_date, 'UTC'))->diffInDays()) < 0) {
echo "The date is older than 30 days";
}
【讨论】:
如果你使用的是 PHP 5.3 或更高版本,你可以这样做:
$someDate = new \DateTime('2011-08-19 17:14:40');
$now = new \DateTime();
if($someDate->diff($now)->days > 30) {
echo 'The date was more than 30 days ago.';
}
【讨论】:
h 属性,但它实际上是差异的一部分(因为它与 y(年)、m(月)、d(天)等有关)。为了获得时间,我会做($now->getTimestamp() - $someDate->getTimestamp()) / 3600。这将返回一个小数。然后,如果您希望将其用作整数,则可以选择使用 round()、intval() 等。
diff 方法看起来很优雅。
(new DateTime('2021-08-10'))->diff(new DateTime())->days > 30
使用meringue 库,这至少可以通过两种方式完成。
第一个如下所示:
(new Future(
new DateTimeParsedFromISO8601String('2011-08-19 17:14:40'),
new NDays(30)
))
->earlierThan(
new Now()
);
语义如下:首先,从 ISO8601 字符串中解析一个日期,然后创建一个比该日期晚 30 天的未来日期,最后将其与当前日期时间比较,即now。
第二种方法是从日期时间范围创建一个间隔并计算它所包含的天数。看起来是这样的:
(new TotalFullDays(
new FromRange(
new FromISO8601('2011-08-19 17:14:40'),
new Now()
)
))
->value();
这两种方法都非常直观,不会让您记住特殊的 php 日期时间表达式。相反,每个实现都是自动完成的;您只需要构建一个适合您需求的正确对象。
【讨论】: