ロリポップサーバー/WordPressのタイムゾーン(PHP)

「n月になったら表示」みたいなPHPプログラムを、ロリポップサーバーで動かそうとしたらうまく働かなかった。

例えば、次のようなプログラム。

foreach($month = 1; $month <= 12; $month++){
  echo "${month}月";
  if ($month >= date("n")) break;
}

このプログラムは、4月1日になった瞬間に、1月から4月まで出力する。

しかし、実際には、3月までしか出力しなかった。
ちなみに、現在(4月1日深夜)は4月まで出力されています。時差がある。
プログラムのどこかにミスがあるのか。あるのだろう。

そこで思ったのが、PHPのタイムゾーン。

ロリポップのサーバー側のタイムゾーンがおかしいんじゃないのか?!

phpinfo()でタイムゾーンを確認してみます。

ちゃんと、「Asia/Tokyo」になってますね。
正しくセットされています。
疑って、ごめんなさい。

むしろ、ローカルのXAMPPの方が、ベルリンになってますね。
あとから直さないと・・・。

じゃあ、WordPressでタイムゾーンが上書きされているのか?!

サーバーのタイムゾーンが正しいなら、WordPress上でタイムゾーンがあらぬところに上書きされているのかも。

試しに、WordPressのファイルの1つでdateを出力しました。

echo date("Y-n-j H:i:s");
> 2020-4-1 15:41:00

うーん。今、ターミナルでdateを打つと
「2020年 4月 2日 木曜日 00時43分59秒 JST」
と返ってくるので、タイムゾーンがずれてますね、WordPress上で。

ちょっとググってみます。

【Z.com WP】WordPressのタイムゾーン設定

WordPressの設定画面を確認。

やっぱり「東京」になってますね。
念のため「変更を保存」を押して、再度確認。

echo date("Y-n-j H:i:s");
> 2020-4-1 15:50:11

やっぱ、タイムゾーンがズレてますね。
念のため、「UTC+9」で試してみます。

echo date("Y-n-j H:i:s");
> 2020-4-1 15:53:57

ダメですね。

echo date_default_timezone_get();

でタイムゾーンを確認します。

> UTC

ダメですね。

もうよく分からなくなったので、直指定。

date_default_timezone_set("Asia/Tokyo");

これで、さっきのタイムゾーンの確認と時刻の出力を行ってみます。

echo date_default_timezone_get();
> Asia/Tokyo

echo date("Y-n-j H:i:s");
> 2020-4-2 01:00:16

やっと期待した結果に。

なんでか分からないけれど、私のWPは設定画面で「東京」「UTC+9」を指定しても、「UTC」になってしまうようですね。どこかで上書きされている・・・?

というわけで、共通に読み込むヘッダファイルで

date_default_timezone_set("Asia/Tokyo");

を宣言することにしました。下のような具合です。

<?php
// タイムゾーンを強制的に Asia/Tokyo に指定する
date_default_timezone_set("Asia/Tokyo"); 

?><!doctype html>
<html lang="ja">
  <head>
(略・・・)

邪道な気がしますね。
忘れた頃に、どこかで不具合が起こりそう・・・。

 一覧ページへもどる