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

问题描述 投票:0回答:1

我有两个输入字段,用户可以在其中输入以mm / yy要求的日期。一个字段来自,另一个字段至。在后端,我希望能够转换这些字段,以便可以进行日期比较。我知道如果我制定了一些非常严格的规则,那么我100%的时间都可以使用Date或strtotime的确切格式来获取所需的内容。我宁愿采用较宽松的规则,因为有些规则可能会输入mm-yy,mm-yyyy,mm / yyyy,m / yy等。

我的问题是,如果它可能以多种格式出现,有什么方法可以转换,因为我知道用户并不总是遵循建议的格式。我正在laravel应用中执行此操作,因此Carbon可能也可以执行此操作。

谢谢

php laravel date datetime php-carbon
1个回答
0
投票

Carbon支持PHP supports的所有日期格式。因此,“本地化符号”下列出的任何格式均可用于创建有效日期。例如:

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

}

然后,您可以在custom validation rule或控制器中以如下方式使用此类:

MonthYearParser::convertYearMonthToDate('6/2008') 
© www.soinside.com 2019 - 2024. All rights reserved.