「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のファイルの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上で。
ちょっとググってみます。
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/Tokyoecho 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>
(略・・・)
邪道な気がしますね。
忘れた頃に、どこかで不具合が起こりそう・・・。
投稿記事のカテゴリやタグと同じ記事をランダム表示します。