我必须将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)
答案 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
);