PHPで時刻を取得、文字列を生成する方法です。
まずタイムゾーンの設定について
レンタルサーバーでphpをいじっていたんですが、同じコードでも、ブラウザから呼び出す場合と、コマンドラインで実行する場合で、タイムゾーンが違ってるらしく、ブラウザから実行したときだけ、時刻が日本の時刻から9時間遅れていることがありました。
恐らく世界標準時になっていますね。
そんなときは、タイムゾーンを設定する必要があります。
php.ini にタイムゾーンの設定をすればOKです。
1 |
date.timezone = "Asia/Tokyo" |
反映するにはapacheを再起動する必要があります。
1 |
/etc/init.d/httpd restart |
さくらのレンタルサーバーでのphp.ini設定
さくらインターネットのレンタルサーバーの場合は、コントロールパネルからphp.iniを編集することができます。
当然ですが、httpdの再起動なんてことは必要ありません。
下図のように、コントロールパネルの「アプリケーションの設定」メニューからPHP設定の編集をクリックすると、php.iniの編集画面になります。
「保存する」をクリックすると、変更終了、自動で反映されます。
php.iniの編集が厳しい場合はプログラム中に設定できます
稼働中のシステムで停止させたくないためサーバーを再起動したくない、とか、再起動の権限なない、などでphp.iniを変更させたくない場合、プログラムにタイムゾーンの設定をすることもできます。
その場合、時刻を取得する前に date_default_timezone_set 関数を使って、
1 |
date_default_timezone_set('Asia/Tokyo'); |
のように設定します。
下図が使用例です。
現時刻を文字列に整形して取得する方法
それでは、実際に時刻を取得する方法を説明します。
date()関数を使います。
上図では、
1 |
$str_tm = date("y/m/d H:i:s"); |
の行で、日付と時刻の文字列を作って $str_tmに代入しています。
フォーマットを指定する文字については下の表のとおりです。
だいぶ省略していますので、完全なオプションが知りたい場合、PHPマニュアルページを参照してください。
date()関数については、
1 |
string date(string $format[, int $timestamp = time() ]) |
と定義されており、第1引数にフォーマット、第2引数に対象の日時を指定することになってます。第2引数は省略可能であり、省略した場合、現時刻を示すtime()関数が使われます。
$format | 意味 |
---|---|
y | 年を2桁の数字で表示 |
m | 月を2桁の数字で |
d | 日を2桁の数字で。 |
H | 時を2桁の数字で。24時間制。 |
i | 分を2桁の数字で。 |
s | 秒を2桁の数字で。 |
その他・・・ | |
Y | 年を4桁の数字で。 |
D | 曜日を3文字のテキストで(Monなど) |
a | amまたはpm |
h | 時を2桁の数字で。12時間制。 |
ホントはもっともっといっぱいありますが、普段、これぐらい知っておけば良いかなと思います。
まとめ
php で現在日時を取得して文字列にするには、date()関数を使います。
現在日時を取得する前タイムゾーンを指定してある必要があります。
コマンドラインでPHPを実行するときと、ブラウザからPHPを呼び出すときで、タイムゾーンの設定がアンマッチの場合があるので注意必要です。
php.ini にタイムゾーンの設定が抜けていても、コマンドラインからPHPを実行した場合は、システムのタイムゾーンを見ているのかも知れません。
タイムゾーンの設定は、php.iniか プログラム中で行うことができます。
コメント