如何在PHP中转换(非常)旧日期?

时间:2012-10-26 15:03:39

标签: php mysql date php-5.2

我必须将Access数据库迁移到MySQL。我有两个问题:第一个是用两位数指定年份;第二是这是一个生日数据库。例如,我有这样的字符串:

"06/12/76 00:00:00"
"10/15/02 00:00:00"

哪一年是指最后一年(10月15日)?我假设所有年份值超过12的日期都指的是19XX和另一个(从0到12)到本世纪:20XX。

一旦解决了这个问题,我需要格式化这些日期。我试过这个:

$bd = strtotime($birth);
if ($bd > time()) {
    $bd = strtotime("-100 years", $bd);
}
$birth = sua_date_unix2mysql($bd);

但问题是strtotime只能管理1970年以后的日期。有什么想法解决这个问题吗?

注意:日期时间不可用(版本5.2)

2 个答案:

答案 0 :(得分:4)

只需将这些日期操作为字符串。

// "06/12/76 00:00:00"
list($month, $day, $year) = explode('/', $birth);
// $year is actually "76 00:00:00"...
$year = (int)$year;

$century = 2000;
if (($century + $year) > date('Y'))
    $century = 1900;
$year += $century;
$mysql = "$year-$month-$day"; // 19760612 will be recognized by MySQL

答案 1 :(得分:2)

我不知道它是否合适,但你可以很容易地通过字符串操作来做到这一点。

首先将incomming字符串解析为值。要解析字符串,您可以使用sscanf

$date = '06/12/76 00:00:00';
$result = sscanf(
    $date, '%d/%d/%d %d:%d:%d', 
    $month, $day, $year, $hour, $minute, $second
);

然后将年份从两个字母扩展为四个字母。这应该相当容易,简单if

$year += $year < 36 ? 2000 : 1900

然后将字符串重新排列为mysql所需的日期格式。要连接字符串,您可以使用sprintf

$iso = sprintf(
    '%04d-%02d-%02d %02d:%02d:%02d', 
    $year, $month, $day, $hour, $minute, $second
);