(昔のブログの書き直しです。)
使用したソフト
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 . "日"; ?>
これで各曜日までの日付が表示できるのでは…?
ではまたね~( ´ ▽ `)ノ
↓もしこの記事が参考になったら、下のいいねボタンを押していただけると非常に助かります!(ログイン不要)↓