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