php无法正确解析日期

bmp9r5qi  于 2023-02-03  发布在  PHP
关注(0)|答案(1)|浏览(121)

我需要将“Nov 22”转换为一个日期对象,它是在11月。我正在尝试以下方法-但它只适用于有31天的月份:

$novDateString = 'Nov22';
$decDateString = 'Dec22';

$novDate = DateTime::createFromFormat('My', $novDateString);
$decDate = DateTime::createFromFormat('My', $decDateString);

echo $novDate->format('m');
echo $decDate->format('m');

// output
12
12

如您所见,11月22日和12月22日都是12月。事实上,所有少于31天的月份都Map到它之前的月份。这是一个已知的问题还是有一个简单的方法可以解决?

mzsu5hc0

mzsu5hc01#

由于您没有指定日期,因此默认为今天,即31号:

$novDateString = 'Nov22';
$decDateString = 'Dec22';

$novDate = DateTime::createFromFormat('My', $novDateString);
// DateTime @1669926271 {#4573
//    date: 2022-12-01 15:24:31.0 America/New_York (-05:00),
//  }

$decDate = DateTime::createFromFormat('My', $decDateString);
//DateTime @1672518273 {#4578
//    date: 2022-12-31 15:24:33.0 America/New_York (-05:00),
//  }

November 31st不存在,所以日期变成了December 1st。您需要在字符串前面加上一天,然后传入正确的格式:

$novDate = DateTime::createFromFormat('jMy', '1'.$novDateString);
//DateTime @1667331673 {#4576
//    date: 2022-11-01 15:41:13.0 America/New_York (-04:00),
//  }

相关问题