PHP v 5.6.2
我需要转换日期(例如46-Jul-46)给我18/07/1946,并且没有足够的DateTime函数正常工作。 (因为strtotime不适用于1970年之前的日期)。他们最终都给出了20/07/1846这是不正确的。
到目前为止我尝试过的代码:
$date = new DateTime("18-Jul-46");
$date->format('d/m/Y');
另一个带有DateTime的
$date = DateTime::createFromFormat('d-M-y', "18-Jul-46");
$date->format('d/m/Y');
早期也尝试过
$date = date('d/m/Y', strtotime('18-Jul-46'));
他们都没有给我正确的格式。任何指针或帮助,表示赞赏。
谢谢!
答案 0 :(得分:1)
如果您有一个日期,例如'31 -Dec-18',则该日期含糊不清,因为它可能是指1918年的日期或2018年的日期。但是,如果您知道所有日期都指的是1900年代,则给出两位数的年份,则如下所示的代码是可行的:
<?php
$now = new DateTime();
$formatted = "";
$arrFormattedBDays = [];
$birthdays = ['18-Jul-46','19-Aug-47','1-Jan-19','31-Dec-18'];
foreach ($birthdays as $b){
list($d,$m,$y) = explode("-",$b);
$y = '19'.$y;
$dt = new DateTime("$d-$m-$y");
$formatted = $dt->format('d/m/Y');
$arrFormattedBDays[] = $formatted;
}
var_dump($arrFormattedBDays);
Output:
array(4) {
[0]=>
string(10) "18/07/1946"
[1]=>
string(10) "19/08/1947"
[2]=>
string(10) "01/01/1919"
[3]=>
string(10) "31/12/1918"
请参见live code
否则,默认情况下,DateTime根据当前年份创建一个日期对象,您可以根据要保留的真相来设置日期对象的格式;参见here。注意:如果您知道所有日期都发生在20世纪,即1901-2000,那么您可以通过添加一些逻辑来修改此代码;参见here。
答案 1 :(得分:0)
计算机不知道您表示的是2000还是1900。您可以只输入年份的后两位数字,并在前面加上“ 19”,例如:
$date = new DateTime("18-Jul-46");
$date->format('d/m/19y');
如果您也想使用2000,则此代码将使用最接近1970的数字
$date = new DateTime("18-Jul-20");
$date->format('d/m/Y');
$t1 = $date->format('19y');
$t2 = $date->format('20y');
if(abs(1970-$t1)<abs(1970-$t2))
echo $t1; //Take the 19.. one
else
echo $t2; //Take the 20.. one
但是最后,您不确定2030年是否正确。