我正在开发一个 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”格式似乎都是正确的。任何人都可以找出可能导致这种差异的原因并提出解决方案吗?
当您不提供其他值(月份中的日期和时间)时,系统会自动填充当前日期和时间值,这些值超出了二月的范围,因此会自动跳到下个月。
您可以使用感叹号将其他值清零。这会将未提供的日期和时间值设置为 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');