Сравнение формата даты, отличного от США, с другой датой - PullRequest
0 голосов
/ 20 февраля 2019

У нас в основном есть формат даты, например: 'd / m / y'.Пример -> '20/02/2019' в виде строки.

Нам необходимо получить дату сегодняшнего дня и дату сегодняшнего дня + 15 дней.И затем проверьте, находится ли дата, указанная в начале, между этими днями или нет.

Дата X дана.Проверьте, больше ли Дата X, чем сегодняшняя Дата A, и +15 дней Дата B.

Мы хотели бы получить все значения с типом DateTime и с ним можно было бы сравнить, если указанная дата находится между ними.

Мы проверили несколько разных вопросов, но мне не удалось это сделать, по моему мнению, потому что, насколько я видел, я не использую php функцию strtotime правильно.

Мы проверили все эти вопросы:

Добавление дней к $ Date в PHP

Время даты PHP больше, чем сегодня

Вычтите 1 день с помощью PHP

Обнаружено неверно сформированное числовое значение

Дата PHP сравните более старую15 дней

И другие страницы, очень полезные:

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');

Что мне не хватает?Есть ли улучшенный способ сделать это?

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Raül.

Если вы хотите добавить дни к дате, вы должны сделать это в строке , а затем преобразовать ее в DateTime:

Если я правильно понял, у вас есть 3 даты:

  • Тот, который приходит от $item->getData('attribute_name'); как Строка
  • Дата пользователя от $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 дней» сработала только для меня в Г / м / д формат.Вот почему я отформатировал его для вычисления.

В моем примере я сравниваю $ userDate, чтобы проверить, не попадает ли он между двумя другими, но вы можете сравнить их по своему желанию.

Надеюсь, это поможет

0 голосов
/ 20 февраля 2019

В зависимости от магии PHP, например, date_create может вести себя иначе, чем ожидалось.https://secure.php.net/manual/en/function.date-create.php - прочитать второй комментарий.Поскольку вы используете формат дд / мм / ГГГГ, это может работать некорректно.

Во втором примере, который вы используете.

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

Но первая строка вашего вопроса начинается с:

'dm-y'.Пример -> '20 -02-2019', как строка.

Исходя из того, что вы вводите данные, ваш createFromFormat не равен 'd / m / Y' в соответствии с приведенной вами датой примера (это dmY)

...