• 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関数で正しい日時を取得できるようにしておきましょう。

広告
広告

関連する記事

サムネイル

PHPで配列内を検索してインデックス番号を取得する【arra……

2024年07月03日
array_searchは、配列内から特定の値を検索し、見つかった場合はその値のキー(インデックス番号)を返す関数です。該当する値が複数ある場合は、はじめに見つかったインデックス番号を返します。
サムネイル

PHPで配列内に値が存在するか判定する【in_array】

2024年07月02日
PHPのin_arrayは、配列内に特定の値が存在するかを判定して、結果をtrueかfalseで返してくれる関数です。第一引数に「調べたい値」、第二引数に「対象の配列」を指定して判定を行います。
サムネイル

PHPで配列から特定の値を持つキーを全て取得する【array……

2024年07月02日
HPのarray_keys関数は対象の配列からすべてのキー、もしくは特定の値を持つキーを取得して新しい配列として返してくれる関数です。基本的には引数に配列と検索する値をセットして使用します。
サムネイル

PHPで多次元配列の並び替え(ソート)を行う【array_m……

2024年06月13日
PHPで配列のソートを行う方法は他にもありますが、array_multisort関数を使えば、とても簡潔なコードで多次元配列を任意の条件・順序で並び替えを行うことができます。
サムネイル

PHPで配列の最小値や最大値を取得する【minとmax】

2024年06月13日
PHPのmin関数とmax関数はそれぞれ配列の最小値と最大値を取得できる関数です。引数に対象の配列を指定すると最小値や最大値を返します。
サムネイル

PHPで多次元配列から特定のカラムの値を取得する【array……

2024年05月29日
PHPのarray_columnは多次元配列の中から指定したカラムの値のみを抽出することができる関数です。抽出した値は新しい配列に格納されて返ってきます。
サムネイル

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

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