在 Laravel Carbon 中解析“m/Y”日期格式

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

我正在开发一个 Laravel 项目,我需要解析以“m/Y”格式提供的日期输入(例如“02/2024”)。我正在使用 Carbon 进行日期操作。

这是我的代码的一部分:

$dateString = $request->d;

if ($dateString && preg_match('/^\d{2}\/\d{4}$/', $dateString)) {
    $date = Carbon::createFromFormat('m/Y', $dateString)->startOfMonth();
} else {
    $date = Carbon::now()->startOfMonth();
}

$formattedDate = $date->format('m/Y');

我遇到的问题是,例如,当输入日期字符串为“02/2024”时,解析的日期最终为“2023-03-01”而不是“2024-02-01”。

我检查了正则表达式和解析格式,它们对于“m/Y”格式似乎都是正确的。任何人都可以找出可能导致这种差异的原因并提出解决方案吗?

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

当您不提供其他值(月份中的日期和时间)时,系统会自动填充当前日期和时间值,这些值超出了二月的范围,因此会自动跳到下个月。

您可以使用感叹号将其他值清零。这会将未提供的日期和时间值设置为 0 而不是当前值。

$dateString = $request->d;

if ($dateString && preg_match('/^\d{2}\/\d{4}$/', $dateString)) {
    $date = Carbon::createFromFormat('!m/Y', $dateString)->startOfMonth();
} else {
    $date = Carbon::now()->startOfMonth();
}

$formattedDate = $date->format('m/Y');
© www.soinside.com 2019 - 2024. All rights reserved.