Php 比较日期仅为mm/yy的输入字段

Php 比较日期仅为mm/yy的输入字段,php,laravel,date,datetime,php-carbon,Php,Laravel,Date,Datetime,Php Carbon,我有两个输入字段,用户可以在其中输入请求的日期mm/yy。一个字段是from,另一个字段是to。在后端,我希望能够转换这些字段,以便进行日期比较。我知道,如果我制定了一些非常严格的规则,那么我100%的时间都能得到准确的格式,我可以使用Date或strotime,得到我需要的。我宁愿有更宽松的规则,因为有些人可能会输入mm yy、mm yyyy、mm/yyyy、m/yy等 我的问题是,如果它可能有多种格式,有什么方法可以转换,因为我知道用户并不总是遵循推荐的格式。我在一个laravel应用程序中

我有两个输入字段,用户可以在其中输入请求的日期mm/yy。一个字段是from,另一个字段是to。在后端,我希望能够转换这些字段,以便进行日期比较。我知道,如果我制定了一些非常严格的规则,那么我100%的时间都能得到准确的格式,我可以使用Date或strotime,得到我需要的。我宁愿有更宽松的规则,因为有些人可能会输入mm yy、mm yyyy、mm/yyyy、m/yy等

我的问题是,如果它可能有多种格式,有什么方法可以转换,因为我知道用户并不总是遵循推荐的格式。我在一个laravel应用程序中这样做,所以碳也有这样做的方法


感谢

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');
<?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");
    }

}
如果希望支持任何其他格式,可以使用
Carbon::createFromFormat
方法从给定格式创建日期。您可以创建一个新类来支持多种新格式,例如:

use Carbon\Carbon;
$date = new Carbon('2008-6');
$date = new Carbon('2008-06');
$date = new Carbon('June 2008');
$date = new Carbon('2008 June');
<?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");
    }

}

用户并不总是遵循推荐的格式
为什么不提供一个日期选择器来保护输入和日期的AccessLavel类型转换的方便性