1

我必须将 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 版)

4

2 回答 2

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
于 2012-10-26T15:10:26.423 回答
2

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

首先将传入的字符串解析为值。要解析字符串,您可以使用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
);
于 2012-10-26T15:09:24.003 回答