time関数について(phpのお話)

(昔のブログの書き直しです。)

使用したソフト

php5.4

こんにちは〜

今回はphpにあるtime()関数で少し引っかかったところを紹介しようかな、と…

unityとは全く関係ないですが(・・;)

まずはtime()関数についておさらいです(要らない・・・まあそう言わずに…)

time

(PHP 4, PHP 5, PHP 7)

time現在の Unix タイムスタンプを返す

説明

int time ( void )

現在時刻を Unix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの通算秒として返します。

phpの公式サイトからそのまま引用しました(笑)

まぁ要するに現在時刻を返すんですよね。

これで何に引っかかったのかと言うと、とあるサイトを作成中に、「何曜日まであと〇日」ってつくろうと思ったのですが、

<?php
    echo floor(time() / (24 * 60 * 60)) % 7 . "日";
?>

何やっているかわかりますかね?(・・;)

こう書くと、1970年1月1日が木曜だから、木曜日までの日数が表示できるのでは!

(1970年1月1日0時0分0秒が0なので、0÷7のあまり0より、残り0日と表示される、と言うわけです)

としてこれを実行してみました。

日曜日の夜はちゃんと「4日」と表示されていました。

しかし、日付が変わった瞬間に見ても「4日」と表示されていたのです。

変ですよね?日付変わったのに残り日数変わってないとか。。。

もしかしたらfloor関数がうまくいってないのか、それとも割り算が変なのか・・・

考えたり、周りに聞いたりして、ふと気づきました。

現在時刻を Unix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの通算秒として返します。

GMT、つまり本初子午線での0時0分0秒をゼロにして計算されていたのです。

だから、日本で日付変わっても、本初子午線上はまだ15時とか…(・・;)

 

というわけで、time()直接使うときは9時間足さないと変になるよ、ってことでした。(笑)

 

それを考慮したコードがこれです。

<?php
    //9時間ずらし
    $nineback = 9 * 60 * 60;
    //1日(24時間)
    $daily = 24 * 60 * 60;
    echo "木曜日まで" .  floor((time() +  $nineback) / $daily + 0) % 7 . "日";
    echo "金曜日まで" .  floor((time() +  $nineback) / $daily + 1) % 7 . "日";
    echo "土曜日まで" .  floor((time() +  $nineback) / $daily + 2) % 7 . "日";
    echo "日曜日まで" .  floor((time() +  $nineback) / $daily + 3) % 7 . "日";
    echo "月曜日まで" .  floor((time() +  $nineback) / $daily + 4) % 7 . "日";
    echo "火曜日まで" .  floor((time() +  $nineback) / $daily + 5) % 7 . "日";
    echo "水曜日まで" .  floor((time() +  $nineback) / $daily + 6) % 7 . "日";
    echo "木曜日まで" .  floor((time() +  $nineback) / $daily) % 7 . "日";

?>

これで各曜日までの日付が表示できるのでは…?

ではまたね~( ´ ▽ `)ノ

 





↓もしこの記事が参考になったら、下のいいねボタンを押していただけると非常に助かります!(ログイン不要)↓

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です