質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

630閲覧

変数が一日以内かどうかの判断

newyee

総合スコア213

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/02/17 04:00

pho

1<?php 2$blog = mktime(1,30,0,17,2,2019); 3if($blog >= time() - 86400){ 4 echo "new!!"; 5}

上記のコードなのですが、$blog内の変数が一日かどうかの判断をするためには、現在時刻のタイムスタンプから、一日の秒数(86400秒)を引き、その数が、$blogを下回っていた場合、$blogは一日以内の数字だと判断がつくとのことなのですが、その理屈が分からないです。
どなたか、ご解説願えましたら幸いです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

mktimeの使い方にあやまりがあるように見えます。
微妙な形ですが、正しい順番は時、分、秒、月、日、年

php

1$blog = mktime(1,30,0,17,2,2019); 2// 1588383000 >> 05/02/2020 @ 1:30am (UTC) 3$blog = mktime(1,30,0,2,17,2019); 4// 1550367000 >> 02/17/2019 @ 1:30am (UTC)

これがPHP4の時からのメソッドなので、PHP5.2からあるDateTimeクラスを使うようにおすすめします。

php

1$blog = new DateTime("2019-02-17 01:30:00"); 2$now = new DateTime; 3$lastYear = (new DateTime)->sub(new DateInterval('P1Y'));

composerなど使っていたら、Carbon、またはChronosを見た方がいいかもしれません。
特にタイムゾーンサポートが必要でしたら。

投稿2019/02/17 06:06

Bremenkanp

総合スコア205

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newyee

2019/02/19 01:43

ご回答ありがとうございます。 現在は参考書でphpを勉強していて、mktime関数が出てきているのですが、DateTime関数の方が表記的に分かりやすい感じがします!
guest

0

ベストアンサー

現在時刻のタイムスタンプから86400秒を引く→現在時刻からちょうど1日前のタイムスタンプと同じ数字になる
その数字を基準として
それより小さい数字 = それより前の時間のタイムスタンプであれば、$blogは1日以上前に作成されている
大きい数字 = それより後の時間のタイムスタンプであれば、$blogは1日以内に作成されている

これでは不十分でしょうか? これより深い理屈の部分の話であれば、プログラミング・数学に詳しい方にお任せします。

投稿2019/02/17 04:14

yu-smc

総合スコア610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newyee

2019/02/17 04:44

ご回答いただきありがとうございます。 分かりやすく、理解でき助かりました。 ただ、すみません、一点だけ気になる部分があるのですが、こちらの条件式の部分で「if($blog >= time() - 86400)」$blogは現在時刻から86400を引いた数「以上」となっているのですが、何故、引いた数「より大きい数」ではなく、以上となっているのでしょうか...?
yu-smc

2019/02/17 05:08

それに関してはこのコードを書いた人にしかわからないのではないでしょうか。。 24時間ぴったりの瞬間にnew!と出すか出さないかの違いであって、もちろんイコールを取ってもそういう仕様としては機能します。
newyee

2019/02/17 05:15

ご返信ありがとうございます。 あ、そういうことでしたか。「以上」の場合は24時間ピッタリの瞬間であって、「より大きい」場合はピッタリではなく、少しでも経過してなければならないということなのですね。 変な所につまずいてしまいましたが、おかげで理解することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問