自定义格式的日期差

时间:2019-03-15 12:38:36

标签: php datetime

我知道这里周围有很多东西,但是对于许多我阅读和测试过的文章来说,这根本行不通。

我正在使用d.m.y之类的ACF保存日期并且也正在阅读。

当我进行这种类型的比较时,它仅在当月有效。不管我做什么,这都是我已经完成的工作,可以建议吗?

if(strtotime(date('d.m.y')) > strtotime($cd_date_from)) {
   $output .= ' class="event-passed"';
}

这意味着我只在日期早于今天(今天显示)的表行上隐藏事件。 如果日期是15.03.19或28.03.19,则显示的是BUT,如果日期是15.04.19(其他月份),则不是。

提前谢谢

2 个答案:

答案 0 :(得分:1)

通过查看各个组成部分之间的分隔符,可以消除m / d / y或d-m-y格式的日期的歧义:如果分隔符为斜杠(/),则假定为美国m / d / y;相反,如果分隔符是破折号(-)或点(。),则采用欧洲d-m-y格式。但是,如果以两位数格式给出年份,并且分隔符为破折号(-),则日期字符串将解析为y-m-d。

为避免可能出现的歧义,最好在可能的情况下使用ISO 8601(YYYY-MM-DD)日期或DateTime :: createFromFormat()。

http://php.net/manual/en/function.strtotime.php

使用:

if(strtotime(date('Y-m-d')) > strtotime($cd_date_from)) {
   $output .= ' class="event-passed"';
}

并将Y-m-d格式值传递给$cd_date_from

答案 1 :(得分:0)

使用\ DateTimeInterface在php中使用DateTime更加容易: \DateTime::createFromFormat

<?php
$format = 'd.m.y';
$cd_date_from = '12.03.19';
$date = \DateTime::createFromFormat($format, $cd_date_from);
$date->setTime(0,0,0,0);
if (new \DateTime() > $date) {
    echo 'hello';
}