LoginSignup
6
5

More than 5 years have passed since last update.

Excelファイルのシリアル値をPHPで日付に変換する

Last updated at Posted at 2015-08-12

単刀直入に言うと、$date = date('Y年m月d日', ($serial - 25569) * 60 * 60 * 24); でOK

確認をば。

serial.php
<?php

$date = '';

$array = array(
    '1990/01/22',    // 一般?的な日付の書き方
    '2015-08-12',
    '19900122',
    '20150812',
    '32895',         // これがExcelのシリアル値
    '38576'
);

foreach ((array)$array as $key => $value) {
    if (preg_match('/\A[0-9]{4}[\/-]?[0-9]{2}[\/-]?[0-9]{2}\z/i', $value)) {
        $date = date('Y年m月d日', strtotime($value));
    } elseif (preg_match('/\A[0-9]{5}\z/i', $value)) {
        // ここが変換部分。この計算で既にUnix タイムスタンプになるためstrtotime()は不要
        $date = date('Y年m月d日', ($value - 25569) * 60 * 60 * 24);
    } else {
        $date = false;
    }

    echo '変換前   : '.$value."\n";
    if ($date !== false) {
        echo '変換後   : '.$date."\n\n";
    } else {
        echo 'false'."\n\n";
    }

}

結果

変換前   : 1990/01/22
変換後   : 1990年01月22日

変換前   : 2015-08-12
変換後   : 2015年08月12日

変換前   : 19900122
変換後   : 1990年01月22日

変換前   : 20150812
変換後   : 2015年08月12日

変換前   : 32895
変換後   : 1990年01月22日

変換前   : 38576
変換後   : 2005年08月12日
6
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5