• HOME > 
  • PHP > 
  • PHPのタイムゾーンの設定方法【現在時刻がずれている時の対処...

PHPのタイムゾーンの設定方法【現在時刻がずれている時の対処法】

投稿日:

このページにはGoogleアドセンス広告とアフィリエイト広告が含まれています。

カテゴリー記事のアイキャッチ画像
広告
広告

タイムゾーンとは?

WEBサイトやWEBサービスではリアルタイムの時刻を表示したり、現在の日時によって異なる処理を行う場合があります。

それらは、日本からアクセスしているから自動的に日本の時刻になっているのではありません。タイムゾーンという設定を行うことで日本の時間が正しく取得されるようになっているのです。

タイムゾーンとはその名のとおり、時間によって世界の地域を区分けしたものです。UTC(協定世界時)というものを基準に、そこからの時差によって世界はいくつものエリアに分類されています。

このタイムゾーンの設定によってWEBサイトは、世界のどの地域の時刻を使用するかを決定しています。

制作するWEBサイトやWEBサービスで日本の時刻を扱うためにはタイムゾーンを正しく設定しておく必要があり、反対に日本であっても他の地域のタイムゾーンを設定することも可能です。

タイムゾーンの種類

下記に表示したように膨大な数のタイムゾーンが存在します。日本は「Asia/Tokyo」というタイムゾーンになります。

タイムゾーン一覧

  • Africa/Abidjan
  • Africa/Accra
  • Africa/Addis_Ababa
  • Africa/Algiers
  • Africa/Asmara
  • Africa/Bamako
  • Africa/Bangui
  • Africa/Banjul
  • Africa/Bissau
  • Africa/Blantyre
  • Africa/Brazzaville
  • Africa/Bujumbura
  • Africa/Cairo
  • Africa/Casablanca
  • Africa/Ceuta
  • Africa/Conakry
  • Africa/Dakar
  • Africa/Dar_es_Salaam
  • Africa/Djibouti
  • Africa/Douala
  • Africa/El_Aaiun
  • Africa/Freetown
  • Africa/Gaborone
  • Africa/Harare
  • Africa/Johannesburg
  • Africa/Juba
  • Africa/Kampala
  • Africa/Khartoum
  • Africa/Kigali
  • Africa/Kinshasa
  • Africa/Lagos
  • Africa/Libreville
  • Africa/Lome
  • Africa/Luanda
  • Africa/Lubumbashi
  • Africa/Lusaka
  • Africa/Malabo
  • Africa/Maputo
  • Africa/Maseru
  • Africa/Mbabane
  • Africa/Mogadishu
  • Africa/Monrovia
  • Africa/Nairobi
  • Africa/Ndjamena
  • Africa/Niamey
  • Africa/Nouakchott
  • Africa/Ouagadougou
  • Africa/Porto-Novo
  • Africa/Sao_Tome
  • Africa/Tripoli
  • Africa/Tunis
  • Africa/Windhoek
  • America/Adak
  • America/Anchorage
  • America/Anguilla
  • America/Antigua
  • America/Araguaina
  • America/Argentina/Buenos_Aires
  • America/Argentina/Catamarca
  • America/Argentina/Cordoba
  • America/Argentina/Jujuy
  • America/Argentina/La_Rioja
  • America/Argentina/Mendoza
  • America/Argentina/Rio_Gallegos
  • America/Argentina/Salta
  • America/Argentina/San_Juan
  • America/Argentina/San_Luis
  • America/Argentina/Tucuman
  • America/Argentina/Ushuaia
  • America/Aruba
  • America/Asuncion
  • America/Atikokan
  • America/Bahia
  • America/Bahia_Banderas
  • America/Barbados
  • America/Belem
  • America/Belize
  • America/Blanc-Sablon
  • America/Boa_Vista
  • America/Bogota
  • America/Boise
  • America/Cambridge_Bay
  • America/Campo_Grande
  • America/Cancun
  • America/Caracas
  • America/Cayenne
  • America/Cayman
  • America/Chicago
  • America/Chihuahua
  • America/Costa_Rica
  • America/Creston
  • America/Cuiaba
  • America/Curacao
  • America/Danmarkshavn
  • America/Dawson
  • America/Dawson_Creek
  • America/Denver
  • America/Detroit
  • America/Dominica
  • America/Edmonton
  • America/Eirunepe
  • America/El_Salvador
  • America/Fort_Nelson
  • America/Fortaleza
  • America/Glace_Bay
  • America/Godthab
  • America/Goose_Bay
  • America/Grand_Turk
  • America/Grenada
  • America/Guadeloupe
  • America/Guatemala
  • America/Guayaquil
  • America/Guyana
  • America/Halifax
  • America/Havana
  • America/Hermosillo
  • America/Indiana/Indianapolis
  • America/Indiana/Knox
  • America/Indiana/Marengo
  • America/Indiana/Petersburg
  • America/Indiana/Tell_City
  • America/Indiana/Vevay
  • America/Indiana/Vincennes
  • America/Indiana/Winamac
  • America/Inuvik
  • America/Iqaluit
  • America/Jamaica
  • America/Juneau
  • America/Kentucky/Louisville
  • America/Kentucky/Monticello
  • America/Kralendijk
  • America/La_Paz
  • America/Lima
  • America/Los_Angeles
  • America/Lower_Princes
  • America/Maceio
  • America/Managua
  • America/Manaus
  • America/Marigot
  • America/Martinique
  • America/Matamoros
  • America/Mazatlan
  • America/Menominee
  • America/Merida
  • America/Metlakatla
  • America/Mexico_City
  • America/Miquelon
  • America/Moncton
  • America/Monterrey
  • America/Montevideo
  • America/Montserrat
  • America/Nassau
  • America/New_York
  • America/Nipigon
  • America/Nome
  • America/Noronha
  • America/North_Dakota/Beulah
  • America/North_Dakota/Center
  • America/North_Dakota/New_Salem
  • America/Ojinaga
  • America/Panama
  • America/Pangnirtung
  • America/Paramaribo
  • America/Phoenix
  • America/Port-au-Prince
  • America/Port_of_Spain
  • America/Porto_Velho
  • America/Puerto_Rico
  • America/Punta_Arenas
  • America/Rainy_River
  • America/Rankin_Inlet
  • America/Recife
  • America/Regina
  • America/Resolute
  • America/Rio_Branco
  • America/Santarem
  • America/Santiago
  • America/Santo_Domingo
  • America/Sao_Paulo
  • America/Scoresbysund
  • America/Sitka
  • America/St_Barthelemy
  • America/St_Johns
  • America/St_Kitts
  • America/St_Lucia
  • America/St_Thomas
  • America/St_Vincent
  • America/Swift_Current
  • America/Tegucigalpa
  • America/Thule
  • America/Thunder_Bay
  • America/Tijuana
  • America/Toronto
  • America/Tortola
  • America/Vancouver
  • America/Whitehorse
  • America/Winnipeg
  • America/Yakutat
  • America/Yellowknife
  • Antarctica/Casey
  • Antarctica/Davis
  • Antarctica/DumontDUrville
  • Antarctica/Macquarie
  • Antarctica/Mawson
  • Antarctica/McMurdo
  • Antarctica/Palmer
  • Antarctica/Rothera
  • Antarctica/Syowa
  • Antarctica/Troll
  • Antarctica/Vostok
  • Arctic/Longyearbyen
  • Asia/Aden
  • Asia/Almaty
  • Asia/Amman
  • Asia/Anadyr
  • Asia/Aqtau
  • Asia/Aqtobe
  • Asia/Ashgabat
  • Asia/Atyrau
  • Asia/Baghdad
  • Asia/Bahrain
  • Asia/Baku
  • Asia/Bangkok
  • Asia/Barnaul
  • Asia/Beirut
  • Asia/Bishkek
  • Asia/Brunei
  • Asia/Chita
  • Asia/Choibalsan
  • Asia/Colombo
  • Asia/Damascus
  • Asia/Dhaka
  • Asia/Dili
  • Asia/Dubai
  • Asia/Dushanbe
  • Asia/Famagusta
  • Asia/Gaza
  • Asia/Hebron
  • Asia/Ho_Chi_Minh
  • Asia/Hong_Kong
  • Asia/Hovd
  • Asia/Irkutsk
  • Asia/Jakarta
  • Asia/Jayapura
  • Asia/Jerusalem
  • Asia/Kabul
  • Asia/Kamchatka
  • Asia/Karachi
  • Asia/Kathmandu
  • Asia/Khandyga
  • Asia/Kolkata
  • Asia/Krasnoyarsk
  • Asia/Kuala_Lumpur
  • Asia/Kuching
  • Asia/Kuwait
  • Asia/Macau
  • Asia/Magadan
  • Asia/Makassar
  • Asia/Manila
  • Asia/Muscat
  • Asia/Nicosia
  • Asia/Novokuznetsk
  • Asia/Novosibirsk
  • Asia/Omsk
  • Asia/Oral
  • Asia/Phnom_Penh
  • Asia/Pontianak
  • Asia/Pyongyang
  • Asia/Qatar
  • Asia/Qyzylorda
  • Asia/Riyadh
  • Asia/Sakhalin
  • Asia/Samarkand
  • Asia/Seoul
  • Asia/Shanghai
  • Asia/Singapore
  • Asia/Srednekolymsk
  • Asia/Taipei
  • Asia/Tashkent
  • Asia/Tbilisi
  • Asia/Tehran
  • Asia/Thimphu
  • Asia/Tokyo
  • Asia/Tomsk
  • Asia/Ulaanbaatar
  • Asia/Urumqi
  • Asia/Ust-Nera
  • Asia/Vientiane
  • Asia/Vladivostok
  • Asia/Yakutsk
  • Asia/Yangon
  • Asia/Yekaterinburg
  • Asia/Yerevan
  • Atlantic/Azores
  • Atlantic/Bermuda
  • Atlantic/Canary
  • Atlantic/Cape_Verde
  • Atlantic/Faroe
  • Atlantic/Madeira
  • Atlantic/Reykjavik
  • Atlantic/South_Georgia
  • Atlantic/St_Helena
  • Atlantic/Stanley
  • Australia/Adelaide
  • Australia/Brisbane
  • Australia/Broken_Hill
  • Australia/Currie
  • Australia/Darwin
  • Australia/Eucla
  • Australia/Hobart
  • Australia/Lindeman
  • Australia/Lord_Howe
  • Australia/Melbourne
  • Australia/Perth
  • Australia/Sydney
  • Europe/Amsterdam
  • Europe/Andorra
  • Europe/Astrakhan
  • Europe/Athens
  • Europe/Belgrade
  • Europe/Berlin
  • Europe/Bratislava
  • Europe/Brussels
  • Europe/Bucharest
  • Europe/Budapest
  • Europe/Busingen
  • Europe/Chisinau
  • Europe/Copenhagen
  • Europe/Dublin
  • Europe/Gibraltar
  • Europe/Guernsey
  • Europe/Helsinki
  • Europe/Isle_of_Man
  • Europe/Istanbul
  • Europe/Jersey
  • Europe/Kaliningrad
  • Europe/Kiev
  • Europe/Kirov
  • Europe/Lisbon
  • Europe/Ljubljana
  • Europe/London
  • Europe/Luxembourg
  • Europe/Madrid
  • Europe/Malta
  • Europe/Mariehamn
  • Europe/Minsk
  • Europe/Monaco
  • Europe/Moscow
  • Europe/Oslo
  • Europe/Paris
  • Europe/Podgorica
  • Europe/Prague
  • Europe/Riga
  • Europe/Rome
  • Europe/Samara
  • Europe/San_Marino
  • Europe/Sarajevo
  • Europe/Saratov
  • Europe/Simferopol
  • Europe/Skopje
  • Europe/Sofia
  • Europe/Stockholm
  • Europe/Tallinn
  • Europe/Tirane
  • Europe/Ulyanovsk
  • Europe/Uzhgorod
  • Europe/Vaduz
  • Europe/Vatican
  • Europe/Vienna
  • Europe/Vilnius
  • Europe/Volgograd
  • Europe/Warsaw
  • Europe/Zagreb
  • Europe/Zaporozhye
  • Europe/Zurich
  • Indian/Antananarivo
  • Indian/Chagos
  • Indian/Christmas
  • Indian/Cocos
  • Indian/Comoro
  • Indian/Kerguelen
  • Indian/Mahe
  • Indian/Maldives
  • Indian/Mauritius
  • Indian/Mayotte
  • Indian/Reunion
  • Pacific/Apia
  • Pacific/Auckland
  • Pacific/Bougainville
  • Pacific/Chatham
  • Pacific/Chuuk
  • Pacific/Easter
  • Pacific/Efate
  • Pacific/Enderbury
  • Pacific/Fakaofo
  • Pacific/Fiji
  • Pacific/Funafuti
  • Pacific/Galapagos
  • Pacific/Gambier
  • Pacific/Guadalcanal
  • Pacific/Guam
  • Pacific/Honolulu
  • Pacific/Kiritimati
  • Pacific/Kosrae
  • Pacific/Kwajalein
  • Pacific/Majuro
  • Pacific/Marquesas
  • Pacific/Midway
  • Pacific/Nauru
  • Pacific/Niue
  • Pacific/Norfolk
  • Pacific/Noumea
  • Pacific/Pago_Pago
  • Pacific/Palau
  • Pacific/Pitcairn
  • Pacific/Pohnpei
  • Pacific/Port_Moresby
  • Pacific/Rarotonga
  • Pacific/Saipan
  • Pacific/Tahiti
  • Pacific/Tarawa
  • Pacific/Tongatapu
  • Pacific/Wake
  • Pacific/Wallis
  • UTC

タイムゾーンが違うとどうなるか?

さてこのタイムゾーンですが、もし正しく設定されていなければどのような問題が発生するのでしょうか?

date関数で取得した日時がズレる原因になる

WEBサイトやWEBサービスの制作においては、年月日を取得して表示させたり、日時によって異なる処理を行いたい場面があります。

PHPでは、date関数を使用することで現在の年月日や時刻、曜日までを簡単に取得することができます。

しかしタイムゾーンが正しく設定されていなければ、日本の現在日時が取得できないという状況が発生します。

タイムゾーンのイメージ

date関数による日時が実際のものと違う原因は、サーバー側のシステムの初期設定に日本と異なるタイムゾーンが設定されているためです。

サーバーによってはあらかじめ標準の時間設定を日本にしてくれている場合もありますが、実際ずれているということは初期設定が日本になっていないということで間違いないでしょう。

ちなみにXAMPPのタイムゾーンの初期設定も日本標準時ではありません。タイムゾーンには「Europe/Berlin」(ベルリン)が設定されており、実際の日本の時刻よりも約9時間ほど遅れています。

例えばその状態でdate関数で日時を取得して見ると、日本で午後2時の場合、取得結果は午前5時となってしまいます。

date関数のおさらい

まずはじめにPHPのdate関数がどのようなものかを簡単におさらいしておきましょう。

PHPはdate関数を用いることで現在の日時を取得することができるようになっています。

フォーマットを行うことで現在の年月日だけであったり時刻だけ取得できたり、曜日や任意の日時を取得することも可能です。

日時と連動させたシステムを構築するためのプログラミングには欠かすことのできない関数です。

PHP

<?php
    echo date('Y/m/d H:i:s');
?>

プレビュー

date関数
リンク先のサムネイル
PHPで日付を取得する方法

PHPのdate関数は当日の日付を年月日で取得したり、現在時刻を取得することが出来る関数です。date関数の使い方は簡単で、「date('フォーマット形式')」という形で記述します。フォーマットには「Y/m/d」や「Y年m月d日」などがあり、年だけ、月だけ、日にちだけ取得することも可能です...【もっと読む】

現在のタイムゾーン設定を確認する

date関数で取得した日時がズレている場合は、まず現時点でのタイムゾーンの設定がどのようになっているのか、その状況を確認してみましょう。

phpにはタイムゾーンの設定情報を取得する関数が用意されています。

date_default_timezone_getを使って取得する

date_default_timezone_getを使用すると現在のタイムゾーン設定が取得できます。echoでブラウザに表示させてみましょう。

PHP

<?php
    echo date_default_timezone_get();
    echo date('Y/m/d H:i:s');
?>

プレビュー

date_default_timezone_get

「Europe/Berlin」と出力されたこのタイムゾーン設定を日本のものに変更できれば、正しい現在時刻を取得できます。

日本のタイムゾーンは「Asia/Tokyo」です。

ここから、タイムゾーンを「Asia/Tokyo」に変更する方法を説明していきます。

PHPのタイムゾーンの設定を変更する方法

PHPのタイムゾーンの設定を変更する方法は2種類あります。

ひとつはサーバー側のPHP設定ファイルである「php.ini」を編集する方法、もうひとつは作成しているPHPファイル内で「date_default_timezone_set()」を使用して書き変える方法です。

XAMPPであればphp.iniを書き換えてしまった方が今後何度も設定し直す必要がなくなるので良いかもしれません。

レンタルサーバーなどで「php.ini」ファイルを編集できる環境にない場合は、後者の方法でタイムゾーンの設定を行ってください。

php.iniを編集してタイムゾーンを変更する方法

まずはphp.iniを書き換えてタイムゾーンの変更を行う方法をXAMPPを例にご説明します。

リンク先のサムネイル
XAMPPで使ってローカル環境にワードプレスをインストールする方法

XAMPPは自身のPC内に架空のサーバーを構築してくれる無料ソフトです。このページでは、XAMPPをインストールしてワードプレスを使用する流れを説明します。XAMPPを利用すれば自身のPC内でPHPやMySQLが使えるようになります。ローカル環境でワードプレスを利用したい場合はXAMPPがおすすめです...【もっと読む】

XAMPPを起動している場合はコントロールパネルから一旦停止させておいてください。

XAMPPをインストールしているフォルダを開きます。インストールの際に変更していなければCドライブ内に「XAMPP」フォルダが存在しているはずです。

「XAMPP」フォルダ

その中の「php」フォルダを開きます。

「php」フォルダ

その中から「php.ini」ファイルを探して、テキストエディタで開いてください。

「php.ini」ファイル

上から順に探しても良いですが、何千行もあるので「Ctrl+F」で検索した方が簡単です。

Europe/Berlin

「date.timezone=Europe/Berlin」と記述されている箇所の「Europe/Berlin」の部分を「Asia/Tokyo」に書き変えます。

Asia/Tokyo

ファイルを保存したら、コントロールパネルからXAMPPを起動させてdate関数による表示を確認してください。

変更完了

date_default_timezone_getでタイムゾーンを確認すると「Asia/Tokyo」になっており、日時も日本時間を正しく取得できるようになりました。

XAMPP起動したままタイムゾーンを書き換えても反映されません。コントロールパネルで再起動を行ってから日付の表示が正しく変更されているか確認して下さい。

今回はXAMPPで行いましたが、実際のサーバーとなると管理している人が別だったりするなど、設定ファイルを編集できないような状況も多々考えられます。

そのような場合は次の方法でプログラム内でタイムゾーンを変更するようにしてください。

date_default_timezone_setを使用してタイムゾーンを変更する方法

プログラム内でタイムゾーンを変更する場合はdate_default_timezone_set関数を使用します。

先程から出てくる「date_default_timezone_get」と似ていますが、こちらは「date_default_timezone_set」です。

下記のように「Asia/Tokyo」を指定して変更します。

PHP

<?php
    date_default_timezone_set('Asia/Tokyo');
    echo date_default_timezone_get();
    echo date("Y/m/d H:i:s");
?>

プレビュー

変更完了

ワードプレスの場合

ワードプレスでのサイト制作においてもdate関数を使って日時を取得したい状況はあると思いますが、ワードプレスの場合は少し特殊なので注意が必要です。

まず覚えておきたいことは、ワードプレスではタイムゾーンの設定を直しても、date関数を使用するとUTCが取得される仕様になっているということです。

つまり、前述のようにサーバー側でphp.iniのタイムゾーン設定をいくら変えてもワードプレス内でdate関数を使うとUTCになってしまいます。

また、ワードプレスの一般設定にもタイムゾーン設定は存在してしますが、こちらも残念ながらdate関数には反映してくれません。

そうするとdate_default_timezone_setを使えばよいと思いますが、こちらを使うとワードプレス全体のタイムゾーンの設定を変更してしまうので、本来はUTCを基準に作られた様々なシステムに予期せぬ影響を及ぼし、不具合を引き起こしかねません。そのためdate_default_timezone_setによるタイムゾーンの変更も避けるべきです。

ではワードプレスで日付を取得したい場合にはどうすればよいのでしょうか?詳しくは別ページにて説明しておりますのでそちらをご確認下さい。

リンク先のサムネイル
ワードプレスで今日の日付を表示する方法

ワードプレスのphpファイル上でもdate関数は使用できるのですが、ワードプレスの仕様により時刻がずれてしまうという問題が発生します。日時を取得したい場合はdate_i18n関数を用いるようにしましょう。 使い方はdate関数と同じです...【もっと読む】

まとめ

PHPを使ってWEBサイトやWEBサービスを制作していれば、現在時刻や年月日を利用したい場面は多々あると思います。タイムゾーンをしっかり設定してdate関数で正しい日時を取得できるようにしておきましょう。

関連する記事

サムネイル

XAMPPでSSLを有効にする方法【httpsでアクセスでき……

2024年04月12日
XAMPPをSSL化してhttpsでアクセスできるようにするには、設定ファイルの変更と証明書の作成が必要です。
サムネイル

XAMPPのサイトを別のPCやスマホで開く方法【同一LAN内……

2024年04月12日
同一LAN内(同じWifi環境下)であれば各デバイスのブラウザでURLにIPアドレスを打ち込むだけでPCのXAMPPにあるサイトへアクセスすることが可能です。
サムネイル

XAMPPでPHPのOPcacheの有効化を検証【備忘録】

2024年02月01日
XAMPPでOPcacheの有効化を行ってみたので、その時の手順を備忘録として残しておきます。「OPcache」は、PHPの初回実行時のキャッシュを2回目以降のアクセス時に利用することで、CPU負荷を軽減したり、PHPの高速化を実現するものです。
サムネイル

Laravelのプロジェクトでファビコンを設定する【favi……

2023年11月21日
Laravelのプロジェクトにおいても同様にHTMLのlinkタグを使用してWebサイトにファビコンを設定します。あらかじめLaravelプロジェクト内のディレクトリにアップロードしたファビコンデータをlinkタグのパスをhref属性に設定すればファビコンが表示されます。
サムネイル

Laravel Breezeでログイン認証機能を実装する手順……

2023年08月08日
Laravel BreezeはLaravelのプロジェクトにログイン認証機能を実装することができるパッケージです。登録・ログイン・メール認証・パスワードリセット・登録内容の変更といった一通りの機能がコマンドだけで簡単に導入できます。
サムネイル

Laravelをインストールして開発環境構築する手順【Win……

2023年08月08日
LaravelはPHPのフレームワークの中でも特に人気のあるものの一つです。今回はWindowsPC(ローカル環境)にLaravelをインストールして開発環境を構築する手順を解説します。
サムネイル

【PHP】Composerをインストールする方法(Windo……

2023年03月15日
Composerとは? Composer(コンポーザー)とは、PHPのパッケージ(ライブラリ)依存管理ツールです。 PHPによる開発に必要なフレームワークやパッ […]