【问题标题】:Compare input fields of dates of just mm/yy比较仅 mm/yy 日期的输入字段
【发布时间】:2020-01-12 19:43:05
【问题描述】:

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

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

谢谢

【问题讨论】:

  • users don't always follow the recommended format 为什么不提供一个日期选择器来保护输入和易于访问
  • 日期的 Laravel 类型转换

标签: php laravel date datetime php-carbon


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    相关资源
    最近更新 更多