Php的datetime函数不能识别1000年之前的日期


Php datetime function doesn't recognise dates before 1000

此代码用于从表单输入值,但这并不需要输入0100作为0100的年份,但作为1915年,这是在我的其他问题之一中看到的JS中使用的,这里的任何帮助都会非常好,我认为这个问题是要做的事情,但我只是不能让这个正确工作。这是php的限制吗?

<?php
$year = "";
$month = "";
$day = "";
if (isset($_GET['year']) && !empty($_GET['year'])) {
    $year = $_GET['year'];
}
if (isset($_GET['month']) && !empty($_GET['month'])) {
    $month = $_GET['month'];
    $monthNumber = date('m', strtotime("$month 1 Y"));
}
if (isset($_GET['day']) && !empty($_GET['day'])) {
    $day = $_GET['day'];
}
if ($year != "" && $monthNumber != "" && $day != "") {


    $fullUrlDate = $year . "-" . $monthNumber . "-" . $day;
    $urlDate = new DateTime(date($fullUrlDate));
    $today =  new DateTime(date("Y-m-d H:i:s"));
    $interval = $urlDate->diff($today);
    $gapYears = $interval->y;
    $gapMonths = $interval->m;
    $gapDays = $interval->d;
    $gapDaysTotal = $interval->days;
    $gapWeeksTotal = round($interval->days/7);
    $gapHours = $interval->h;
    $gapMinutes = $interval->i;
    $gapSeconds = $interval->s;
    if ($gapWeeksTotal == 1) {
        $gapWeeksSuffix = "";
    } else {
        $gapWeeksSuffix = "s";
    }   
    if ($gapDays == 1) {
        $gapDaysSuffix = "";
    } else {
        $gapDaysSuffix = "s";
    }   
    $ordinalSuffix = date("S", strtotime($fullUrlDate));
    if (strtotime($fullUrlDate) < strtotime(date("Y-m-d H:i:s")) ) {
        $dateInThePast = true;
    } else {
        $dateInThePast = false;
    }
    // Months gap
    $monthsInterval = date_diff($urlDate, $today);
    $monthsGap = $monthsInterval->m + ($monthsInterval->y * 12);    
    $gapMonthsSuffix = ($monthsGap == 1 ? "" : "s");

DateTime没有这样的限制,但是用于初始化它的date函数有这样的限制。您可以使用DateTime::setDate设置您想要的任何年份:

php > $a = new DateTime("2015-08-24");
php > echo $a->format(DateTime::ISO8601);
2015-08-24T00:00:00+0000
php > $a->setDate(90, 8, 24);
php > echo $a->format(DateTime::ISO8601);
0090-08-24T00:00:00+0000
php > $a->setDate(90090, 8, 24);
php > echo $a->format(DateTime::ISO8601);
90090-08-24T00:00:00+0000