dateinterval :: format在月份日强制执行前导零

时间:2017-01-09 14:24:04

标签: php datetime

我在PHP中运行日期验证:

public function isValidDate($date) {
    $valid = false;
    $valid_formats = array(
        'Y-m-d',
        'm-d-Y',
        'Y/m/d',
        'm/d/Y'
    );
    foreach ($valid_formats as $format) {
        if (!$valid) {
            $d = \DateTime::createFromFormat($format, $date);
            $valid = $d && $d->format($format) == $date;
        }
    }
    return $valid;
}

奇怪的是,如果格式为m / d / Y,并且我将1/1/2016传递给它,则为假,因为当我运行$ d->格式(m / d / Y),我得到了01/01/2016的结果。

有关为何强制执行前导零的任何想法?

2 个答案:

答案 0 :(得分:2)

这是因为您尚未定义匹配仅包含一个字符日期和月份字段的日期的有效格式

function isValidDate($date) {
    $valid = false;
    $valid_formats = array(
        'Y-m-d',
        'm-d-Y',
        'Y/m/d',
        'm/d/Y',
        'j/n/Y',        // <- NEW day/month 1/1
        'n/j/Y'         // <- NEW month/day 1/1
    );
    foreach ($valid_formats as $format) {
        if (!$valid) {
            $d = \DateTime::createFromFormat($format, $date);
            $valid = $d && $d->format($format) == $date;
        }
    }
    return $valid;
}

echo isValidDate('1/1/2016') ? 'VALID' : 'INVALID';

您可能还需要添加其他内容!

答案 1 :(得分:1)

我从W3Schools找到了答案。

官方文档似乎缺少一些格式选项:

d - Day of the month; with leading zeros
j - Day of the month; without leading zeros

m - Month (01-12)
n - Month (1-12)
http://php.net/manual/en/dateinterval.format.php

缺少

'j'和'n'