Сравните поля ввода дат просто мм / гг - PullRequest
0 голосов
/ 12 января 2020

У меня есть два поля ввода, где пользователи могут вводить запрашиваемую дату в виде мм / гг. Одно поле от, а другое для. На бэкэнде я хочу иметь возможность преобразовать эти поля, чтобы я мог сделать сравнение дат. Я знаю, если я введу некоторые очень строгие правила, чтобы я 100% времени получал их в таком точном формате, я мог бы использовать Date или strtotime и получить то, что мне нужно. Я предпочел бы иметь более свободные правила, так как некоторые могут ввести mm-yy, mm-yyyy, mm / yyyy, m / yy, et c.

Мой вопрос, есть ли способ конвертировать, если это потенциально поставляется в различных форматах, так как я знаю, что пользователи не всегда следуют рекомендованному формату. Я делаю это в приложении laravel, так что, возможно, у Carbon есть и способ сделать это.

Спасибо

1 Ответ

0 голосов
/ 13 января 2020

Carbon поддерживает все форматы даты, которые PHP поддерживает . Таким образом, любой из форматов, перечисленных в разделе «Локализованные обозначения», можно использовать для создания действительной даты. Например:

use Carbon\Carbon;
$date = new Carbon('2008-6');
$date = new Carbon('2008-06');
$date = new Carbon('June 2008');
$date = new Carbon('2008 June');

Если вы хотите поддерживать любые другие форматы, вы можете использовать метод Carbon::createFromFormat для создания даты из заданного формата. Вы можете создать новый класс для поддержки нескольких новых форматов, например:

<?php

namespace App\Traits;

use Carbon\Carbon;
use InvalidArgumentException;

class MonthYearParser
{
    const SUPPORTED_FORMATS = [
        'm-y',
        'm-Y',
        'm/y',
        'm/Y',
    ];

    public static function convertYearMonthToDate(string $input)
    {
        foreach(self::SUPPORTED_FORMATS as $format) {
            try {
                $date = Carbon::createFromFormat($format, $input);
                return $date;
            } catch (InvalidArgumentException $e) {
            }
        }
        throw new InvalidArgumentException("Input is not in a valid year-month format");
    }

}

Затем вы можете использовать этот класс, например, в пользовательском правиле валидации или в контроллере как :

MonthYearParser::convertYearMonthToDate('6/2008') 
...