書籍「Laravelの教科書」Laravel13対応サポートガイド公開中 → ダウンロードはこちら

LaravelでExcelの空欄日時をインポートすると 1970-01-01となる理由と対策

Laravelと連携:Excel・PDF・Google

LaravelでExcelファイルをインポートする際、日付部分が空欄である場合、1970-01-01として保存されてしまいます。

日付部分を空欄にしたいときには、困りますよね。

まずは理由を解説した上で、日付部分を1970-01-01からnullに変更する方法を紹介します。

LaravelでExcelの空欄日時をインポートすると 1970-01-01となる理由

Excelでは、UNIX時刻を使って、日時を計算しているそうです。

UNIX時刻では、1970年1月1日午前0時0分0秒を基準として、ここから経過した秒数で時刻が表示される。

つまり、デフォルト状態が1970年1月1日になるようです。

LaravelでExcelの空欄日時をインポートすると 1970-01-01となる時の対策

ただ、これではちょっと困りますよね。

これを力技で何とかするには、次のような方法が考えられます。

  1. インポートする際に firstOrCreateを利用
  2. その後、wasRecentlyCreatedで作成したデータを取得
  3. 2で取得したデータに1970-01-01があれば、nullに変換

インポートファイルの書き方

実際のコードは、次のようになります。

【DangoImportファイルの設定】

<?php
namespace App\Imports;

use App\Models\Dango;
use Maatwebsite\Excel\Row;
use Maatwebsite\Excel\Concerns\OnEachRow;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Carbon\Carbon;

class DangoImport implements OnEachRow, WithHeadingRow
{

    public function OnRow(Row $row)
    {  
       $row=$row->toArray();
       
       $dango=Dango::firstOrCreate(
            [   'dango'=>$row['お団子の種類']],
            [
                'dango'=>$row['お団子の種類'],
                'number'=>$row['数'],
                'date'=>Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row['販売日']))
            ]
        );   

        if($dango->wasRecentlyCreated){
                $date=Carbon::createFromFormat('Y-m-d H:i:s', $dango->date)->format('Y-m-d');
                if($date=='1970-01-01'){
                    $dango->date=null;
                    $dango->update();
                }
        }
    }
}

ご参考までに、コントローラーは次のような感じになります。

【DangoImportファイルのためのコントローラー】

<?php

namespace App\Http\Controllers;
use App\Imports\DangoImport;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Http\Request;
use App\Models\Dango;

class DangoController extends Controller
{
    public function import(){
        $import=new DangoImport;
        Excel::import($import, request()->file('file'));
        return view('dango');
    }
}

これによってインポートしたデータベースは、次のようにnullになります。

【エクセルファイル】

【上記をインポートしたデータベース】

 

じゅんこ
じゅんこ

ちょっと力技かもしれませんが^^;

よかったら、お試しください。

 

なおLaravelにExcelファイルをインポート・エクスポートするときの方法は関連記事で色々取り上げています。

併せて参考にしてください。

Laravelと連携:Excel・PDF・GoogleLaravel・PHP豆知識・トラブル対策

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる
 

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新版Laravel13への対応に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel13に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

Laravelの本を書きました。


ひつじが目印♪

Laravelの使い方を分かりやすく解説した本を書きました。 書店やAmazon等のオンラインショップにて販売中
最新版Laravel13対応用サポートガイド(PDF)あり

書籍の詳細を見てみる

Laravelの本書きました。


ひつじが目印♪
クリックするとamazonページへ。
最新版Laravel13対応用
サポートガイド(PDF)あり

書籍の詳細を見てみる
シェアする
Twitter始めました。

コメント

タイトルとURLをコピーしました