将不同于美国的日期格式与另一个日期进行比较

Comparing different date format than US to another date

我们的日期格式基本上是这样的:'d/m/y'。示例 -> '20/02/2019',作为字符串。

我们需要能够得到今天的日期和今天+15天的日期。然后检查开始时给出的日期是否在这几天之间。

给出的日期 X。检查日期 X 是否大于今天的日期 A 和 +15 天的日期 B。

我们想要获取所有类型为 DateTime 的值,并且能够比较给定的日期是否在它们之间。

我们已经检查了几个不同的问题,但我无法完成它,在我看来,因为据我所知,我没有使用 php 函数strtotime 正确。

我们已经检查了所有这些问题:

Adding days to $Date in PHP

Subtract 1 day with PHP

A non well formed numeric value encountered

PHP date compare older than 15 days

等页,很有用:

https://benholland.me/tutorials/2012/03/11/adding-and-subtracting-dates-and-times-in-php.html

但是,这些值仍然是错误的。

$date = $item->getData('attribute_name'); //Value as String
$data = date_create(date('d/m/Y',strtotime($date))); //Creating the DateTime object.

但这会自动给我们:

object(DateTime)#5793 (3) { ["date"]=> string(26) "1970-01-01 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Madrid" }

在我看来,这一定是某种格式错误,总是自动给我那个日期。

最后一个问题我也试过了:

$date = $item->getData('attribute_name'); //Value as String
$userDate = DateTime::createFromFormat('d/m/Y', $date);
    if ($userDate === false) {
        throw new InvalidArgumentException('Invalid date string');
    }
    $cmp = new DateTime('+15 days'); //today's date +15
    if ($userDate <= $cmp) {
        $userDate = new DateTime();
    }

echo date_format($userDate, 'd/m/Y');

我错过了什么?有更好的方法吗?

谢谢

根据 PHP 的魔力,与 date_create 一样,其行为可能与预期不同。 https://secure.php.net/manual/en/function.date-create.php - 阅读第二条评论。由于您使用的是 dd/mm/YYYY 格式,这可能无法正常工作。

在你使用的第二个例子中。

$date = $item->getData('attribute_name'); //Value as String
$userDate = DateTime::createFromFormat('d/m/Y', $date);`

但是你的问题的第一行是这样开头的:

'd-m-y'. Example -> '20-02-2019', as a String.

根据您给出的示例日期(它是 d-m-Y)

,您的 createFromFormat 不是

劳尔。

如果你想在日期中添加天数,你应该在字符串上添加,然后将其转换为日期时间:

如果我没记错的话,你有 3 个日期:

  • 来自$item->getData('attribute_name');的那个为String
  • 用户从 $userDate = DateTime::createFromFormat('d/m/Y', $date); 开始的日期为 DateTime
  • 您必须计算的“+ 15 天”日期。

在将字符串转换为 DateTime 对象之前(在 $data = date_create(date('d/m/Y',strtotime($date))); 中),您应该计算“+ 15 天”日期。

我会这样做:

    $datestring = '05/02/2019';

    $date = date_create(date('d/m/Y',strtotime($datestring))); //first date

    $userDate = DateTime::createFromFormat('d/m/Y', '22/02/2019'); //user date

    if ($userDate === false) {
        throw new InvalidArgumentException('Invalid date string');
    }


    $cmp = DateTime::createFromFormat('d/m/Y',date('d/m/Y', strtotime($date->format('Y/m/d').' + 15 days'))); //first date +15 days


    if ($userDate <= $cmp && $userDate >= $date) {
       $result = "The user date is in range";
    }
    else {
        $result = "The user date is out of range";
    }

    echo('<b>First date: </b>'.$date->format('d/m/Y'));
    echo('<br> <b>User date : </b>'.$userDate->format('d/m/Y'));
    echo('<br> <b>Date + 15 : </b>'.$cmp->format('d/m/Y'));


    echo('<br><br>'.$result);

此外,'+ 15 天' 连接仅适用于 Y/m/d 格式。这就是为什么我格式化它来计算。

在我的示例中,我比较 $userDate 以检查它是否介于其他两个之间,但您可以根据需要比较它们。

希望对您有所帮助