日期时间::createFromFormat 无法正常工作,格式为 2017-02



我有以下代码,它将返回我上一个和下一个日期(按月选择(。但是当用户选择二月时,我发现它无法正常工作。这是我的代码,用于获取日期:

$dateSelect = @$_GET['datum'] ?: date('Y-m');
$date = DateTime::createFromFormat('Y-m', $dateSelect);
$prevdate = clone $date;
$date->modify('first day of next month');
$this->view->next_month = $date->format('m');
$this->view->next_year = $date->format('Y');
$prevdate->modify('first day of previous month');
$this->view->prev_month = $prevdate->format('m');
$this->view->prev_year = $prevdate->format('Y');

我做了一个例子,以便您可以更快地测试它:PHP 沙箱

如果用户选择日期2017-02则将其处理为2017-03,这是不正确的。尝试将示例中的值更改为2017-01,您将看到它工作正常。由于我的代码中的按钮填充了这些值,因此我的用户无法在不手动更改 URL 的情况下February 2017之前进行操作。

由于 DateTime 将根据当前日期填充日期缺失的d部分,因此您实际上得到了2017-02-29(假设今天是29th(,这是无效的,但 DateTime 通过向前滚动到下个月来调整为有效日期,从而给出2017-03-01

您需要强制d部件到日期以避免此默认行为

$date = DateTime::createFromFormat('Y-m-d', $dateSelect . '-01');

最新更新