PHP 中将当前日期与 d/mm/yyyy 格式的日期进行比较

发布于 2024-12-19 12:07:25 字数 201 浏览 1 评论 0原文

检查给定日期(字符串 d/mm/yyyy)是否是过去的最佳方法是什么? 当我使用 strtotime() 时,由于非美国表示法,它效果不佳。 当然,我可以将日期作为字符串处理并比较子字符串,但必须有更好的方法。

if((strtotime('now')-strtotime($date)) > 86400) echo $date;

What is the best way to check if a given date - a string d/mm/yyyy is a past?
When I used strtotime(), it didn't work well, because of non-American notation.
Of course I might deal with the dates as strings and compare substrings, but there has to be a better way.

if((strtotime('now')-strtotime($date)) > 86400) echo $date;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏了南城 2024-12-26 12:07:25

strtotime('now') 是对该函数的严重滥用。您应该只使用 time() 来获得完全相同的结果,而不需要任何 strtotime 开销。

$thatTime = date_create_from_format('d/m/Y', $date)->getTimestamp();
if (time() - $thatTime > 86400) echo $date;

date_create_from_format() 的相关文档

strtotime('now') is a hideous abuse of the function. You should just use time() to get the EXACT SAME result with none of the strtotime overhead.

$thatTime = date_create_from_format('d/m/Y', $date)->getTimestamp();
if (time() - $thatTime > 86400) echo $date;

relevant docs for date_create_from_format()

爱,才寂寞 2024-12-26 12:07:25

通过查看 m/d/y 或 dmy 格式的日期可以消除歧义
各个组件之间的分隔符:如果分隔符是
斜杠 (/),则采用美式 m/d/y;而如果
分隔符是破折号(-)或点(.),则为欧洲 dmy 格式
假设。

strtotime() 手册

所以一个简单的 str_replace('/', ' -', $date) 应该可以解决问题。

Dates in the m/d/y or d-m-y formats are disambiguated by looking at
the separator between the various components: if the separator is a
slash (/), then the American m/d/y is assumed; whereas if the
separator is a dash (-) or a dot (.), then the European d-m-y format
is assumed.

strtotime() manual

So a simple str_replace('/', '-', $date) should do the trick.

生生不灭 2024-12-26 12:07:25

那么显而易见的答案是像这样重新格式化字符串:

$parts = explode('/',$dateStr);
if ((time() - strtotime("$parts[2]-$parts[1]-$parts[0]")) > 86400) {
  // do stuff
}

EDIT

但是,Marc B 的答案更好,所以就这样做。

Well the obvious answer would be to reformat the string like this:

$parts = explode('/',$dateStr);
if ((time() - strtotime("$parts[2]-$parts[1]-$parts[0]")) > 86400) {
  // do stuff
}

EDIT

However, Marc B's answer is better, so do that.

信仰 2024-12-26 12:07:25

如果您运行的是>PHP5,这可以解决问题:

function in_past($date) {
    $date = explode("/", $date);
    $now = time();
    $date = strtotime($date[1]."/".$date[0]."/".$date[2]);
    return $date < $now;
}

使用如下:

$old_date = "23/01/1985";
if (in_past($old_date))
    echo 'so last season';
else 
    echo 'future';

If you're running >PHP5, this would do the trick:

function in_past($date) {
    $date = explode("/", $date);
    $now = time();
    $date = strtotime($date[1]."/".$date[0]."/".$date[2]);
    return $date < $now;
}

used like:

$old_date = "23/01/1985";
if (in_past($old_date))
    echo 'so last season';
else 
    echo 'future';
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文