php - 比较仅 mm/yy 日期的输入字段
问题描述
我有两个输入字段,用户可以在其中输入请求的日期为 mm/yy。一个字段来自,另一个字段是 to。在后端,我希望能够转换这些字段,以便进行日期比较。我知道如果我制定了一些非常严格的规则,那么我 100% 的时间会以我可以使用 Date 或 strtotime 的确切格式来获得我需要的东西。我宁愿制定更宽松的规则,因为有些人可能会输入 mm-yy、mm-yyyy、mm/yyyy、m/yy 等。
我的问题是,如果它可能以多种格式出现,有什么方法可以转换,因为我知道用户并不总是遵循推荐的格式。我在 laravel 应用程序中这样做,所以也许 Carbon 也有一些方法。
谢谢
解决方案
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')
推荐阅读
- python - 将列中的行类别除以相同类别但不同日期的值
- javascript - 为什么我的代码总是提示“电子邮件格式错误”
- python - 通过发出 POST 请求来更新图像 - Flask
- javascript - 如何在元素的 innerHTML 中呈现 [object HTMLCollection].length?
- javascript - Javascript如何从其页面中提取令牌
- bash - 尝试从 shell 脚本运行 jmx 文件时预期 Jmeter 错误整数表达式
- html - 如何在 html 中使用 express 中的变量?
- android - 快速xy雷达图android
- docker - MacOS 上的 Docker 安装问题 - 构建失败并且 world/authserver 可执行文件似乎丢失
- python - {% if user.is_authenticated %} 仅针对特定用户