PHP使用date_create将字符串数据类型更改为日期时出现间歇性故障

PHP使用date_create将字符串数据类型更改为日期时出现间歇性故障,php,date,Php,Date,我的代码在创建日期时间歇性出现问题 我有一些数据是从另一个来源导入的。日期以两位数的年份输入。但大多数日期都在1970年之前,因此它们被提前到2000世纪。这些是出生日期。所以对于比今天更大的日期,我只是减去100年。此外,正在导入的日期是字符串,而不是日期/时间表单 我的问题开始于我做第一次,减去100年$dob丢失了日期类型并更改为字符串。因此,我使用date_create将其更改回日期/时间类型 我从错误中了解到,布尔值只是尝试转换的结果 我最终会把姓名、地址、出生日期等全部记录下来。。。

我的代码在创建日期时间歇性出现问题

我有一些数据是从另一个来源导入的。日期以两位数的年份输入。但大多数日期都在1970年之前,因此它们被提前到2000世纪。这些是出生日期。所以对于比今天更大的日期,我只是减去100年。此外,正在导入的日期是字符串,而不是日期/时间表单

我的问题开始于我做第一次,减去100年$dob丢失了日期类型并更改为字符串。因此,我使用date_create将其更改回日期/时间类型

我从错误中了解到,布尔值只是尝试转换的结果

我最终会把姓名、地址、出生日期等全部记录下来。。。把它写在我的桌子上

$dob = date_create_from_format('d/m/y', $row["birthdate"]);
if ($dob === FALSE) {
    die("Converting Birthdate to date format failed for ".$row["id"]);
}
if (strtotime($row["birthdate"]) > time()) {
    echo date_format($dob, 'd/m/Y')." Date is greater than today<br>";
    $dob = strtotime($row["birthdate"].' -100 year');
    echo $dob."<br>";
    $dob = date_create(date('d/m/Y', $dob));
    if ($dob === FALSE) {
        echo "date_create failed<br>";
    }
    echo "New date is: ".date_format($dob, 'd/m/Y')."<br>"; //THIS IS LINE 209
} else {
    echo date_format($dob, 'd/m/Y')." Date is not greater than today<br>";
}
echo $firstName." ".$lastName." ".date_format($dob, 'd/m/Y')."<br>"; //THIS IS LINE 213

下面是一个使用该类编写的示例。当您希望执行一些复杂任务时,
DateTime
类的使用非常方便,例如计算(
DateTime
对象可以使用比较运算符进行比较),等等。此外,
DateTime
对象不受问题的影响(当然,方法除外)

$rows=数组(
数组('birthdate'=>'06/01/31'),
数组('birthdate'=>'01/06/66'),
数组('birthdate'=>'06/11/32'),
数组('birthdate'=>'12/11/29'),
数组('birthdate'=>'08/04/27'),
数组('birthdate'=>'02/04/82')
);
foreach($行作为$行){
如果(!$dob=DateTime::createFromFormat('d/m/y',$row[“birthdate”]))
die(“将“$row[“Birthdate”]”的出生日期转换为日期格式失败);
如果($dob>new DateTime()){
echo$dob->format('d/m/Y')“日期大于今天
”; 如果($dob->sub(新日期间隔('P100Y'))回显“新日期为:”.$dob->格式('d/m/Y')”。
”; else回显“日期子项失败
”; }否则{ echo$dob->format('d/m/Y')“日期不大于今天
”; } echo$dob->格式('d/m/Y')。“
”; }
输出:

06/01/2031 Date is greater than today New date is: 06/01/1931 06/01/1931 01/06/2066 Date is greater than today New date is: 01/06/1966 01/06/1966 06/11/2032 Date is greater than today New date is: 06/11/1932 06/11/1932 12/11/2029 Date is greater than today New date is: 12/11/1929 12/11/1929 08/04/2027 Date is greater than today New date is: 08/04/1927 08/04/1927 02/04/1982 Date is not greater than today 02/04/1982 2031年1月6日日期大于今天 新日期为:1931年1月6日 06/01/1931 2066年6月1日日期大于今天 新日期为:1966年6月1日 01/06/1966 2032年11月6日日期大于今天 新日期为:1932年11月6日 06/11/1932 2029年12月11日的日期大于今天 新日期为:1929年11月12日 12/11/1929 2027年4月8日日期大于今天 新日期为:1927年4月8日 08/04/1927 1982年4月2日日期不大于今天 02/04/1982
谢谢你,那帮我修好了。谢谢
$rows = array( 
    array( 'birthdate' => '06/01/31' ),
    array( 'birthdate' => '01/06/66' ),
    array( 'birthdate' => '06/11/32' ),
    array( 'birthdate' => '12/11/29' ),
    array( 'birthdate' => '08/04/27' ),
    array( 'birthdate' => '02/04/82' )
);

foreach( $rows as $row ) {

    if ( !$dob = DateTime::createFromFormat( 'd/m/y', $row["birthdate"] ) )
        die( "Converting Birthdate to date format failed for ".$row["birthdate"] );

    if ( $dob > new DateTime() ) {
        echo $dob->format( 'd/m/Y' ) . " Date is greater than today<br>";

        if ( $dob->sub( new DateInterval('P100Y') ) ) echo "New date is: ".$dob->format( 'd/m/Y' )."<br>";
        else echo "date sub failed<br>";        

    } else {
        echo $dob->format( 'd/m/Y' )." Date is not greater than today<br>";
    }

    echo $dob->format( 'd/m/Y' )."<br>";
}
06/01/2031 Date is greater than today New date is: 06/01/1931 06/01/1931 01/06/2066 Date is greater than today New date is: 01/06/1966 01/06/1966 06/11/2032 Date is greater than today New date is: 06/11/1932 06/11/1932 12/11/2029 Date is greater than today New date is: 12/11/1929 12/11/1929 08/04/2027 Date is greater than today New date is: 08/04/1927 08/04/1927 02/04/1982 Date is not greater than today 02/04/1982