1

Access データベースを MySQL に移行する必要があります。私には 2 つの問題があります。1 つ目は、年が 2 桁で指定されていることです。2 つ目は、これが誕生日データベースであることです。たとえば、次のような文字列があります。

"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 年以降の日付しか管理できないことです。この問題を解決するアイデアはありますか?

: Datetime は使用できません (バージョン 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
);

次に、年を 2 文字から 4 文字に拡張します。それはかなり簡単で、単純な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 に答える