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

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

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

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

Q&A

解決済

6回答

984閲覧

PHPで分岐のロジックについて

takeshi1907

総合スコア54

PHP

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

0グッド

0クリップ

投稿2022/01/06 06:36

編集2022/01/06 07:02

ご質問失礼いたします。
24時間、日に関係なく ○○時から ○○時の間だけ true となるような分岐コードを書きたく思っています。

例えば 13:00 から 18:00 に true としたい場合。
(phpで現在時刻を取得する 今回は14:00とする)

下記のif文で実現できます。

php

1if (13:00 <= 14:00 && 14:00 <= 18:00) { 2// ここに入る 3}

しかし、23:00 から 3:00のように日をまたぐと成り立たなくなってしまいます。

日をまたぐ場合、またがない場合、両方を成立させるコードを簡素に書くにはどのようにすれば良いでしょうか?

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/01/06 06:50

Parse error: syntax error, unexpected token ":" とか言われる不完全なコードで議論するのはやめましょうね。
BeatStar

2022/01/06 06:58

たとえば 質問でいう 14:00 は 77:00 とかもあり得るのですよね? その場合はどのような解釈になりますか? 単に「3日と5時間」というような解釈になりますか? それとも「現在の時刻からの誤差」とかの解釈になりますか? (文面からは前者にしか見えないが、たまに後者だったりするので)
takeshi1907

2022/01/06 07:03

> Parse error: syntax error, unexpected token ":" とか言われる不完全なコードで議論するのはやめましょうね。 すみません。。意図を伝える為の例文としてわかりやすく書いたつもりでした。
退会済みユーザー

退会済みユーザー

2022/01/06 07:03

3:00なる時刻が当日のものなのか翌日のものなのか、それだけでは判別できないから、翌日と分かる情報も別途持っていると考えるべきですよね?
takeshi1907

2022/01/06 07:04

>たとえば 質問でいう 14:00 は 77:00 とかもあり得るのですよね? 0:00から23:00までとなります。
BeatStar

2022/01/06 07:10

>>たとえば 質問でいう 14:00 は 77:00 とかもあり得るのですよね? > 0:00から23:00までとなります。 うん? だったら日をまたぐ必要ありませんよね? チェック対象は 常に一日以内であればまたぐ必要ないので。私が聞きたいのは、「ToDoリスト」的なもののように「後○時間で締め切られます」的なやつがあるのかどうかです。
takeshi1907

2022/01/06 07:24

すみません、そういう意味ですと、30時までで考えています。
guest

回答6

0

ベストアンサー

開始時間を$from、終了時間を$toとしたとき、チェックする時間$timeは

PHP

1if( 2 ($from>$to and ($time>=$from or $time<=$to)) or 3 ($from<=$time and $to>=$time))

みたいな感じです

投稿2022/01/06 06:49

yambejp

総合スコア116724

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

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

takeshi1907

2022/01/06 08:06

素晴らしいご回答ばかりでしたが、一番やりたかった事に近かったので、ベストアンサーとさせていただきました。ご回答いただいた皆様、どうもありがとうございました。
guest

0

常に「システム日」をつけた上でユニックスタイムで判定させれば良いのではないでしょうか。
日をまたぐ場合は24時間(秒)を足す感じで。

投稿2022/01/06 06:40

m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2022/01/06 06:45

日付成分をどこか固定の日付にせず、システムの日付を使う案は良さそうですね。
m.ts10806

2022/01/06 07:02

チェックパターンや「そもそもどこからどのように来る情報が対象なのか」次第ですね。
guest

0

from と to の時刻の大小が、from > to の時は、現在時刻と比較する際のロジックを変えます。

if( from <= to ): if(from <= 現在 && 現在 <= to): 範囲内 else: if(from <= 現在 || 現在 <= to): 範囲内

投稿2022/01/06 07:07

otn

総合スコア85901

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

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

0

もしかしたら質問者さんの意図とは違うかもしれませんが。


私なら、そのままコードに落とし込みますね。

まず、たとえば変数 t があって、この中には 30:00 というデータが入っている。
その場合、どういう計算をしますか?

月をまたぐとかだと月によって30日だったり31日だったり、29日だったりと違いますからややこしくなりますが、時間 <-> 日 だと 24刻みですよね。

つまり、24ずつ刻む。t は 00:00 から 30:00だと仮定すると、最大でも1日と6時(間)とですよね。
ということは t - 24:00 で日をまたいだ時間が求まる。

ただし、3:40 とかみたいな 24時間未満だとマイナスなんちゃらとなりますよね。
ということは、

1. s ← t - 24:00 2. もし s が 負の数になれば 2.1. t の方を使う 3. (2)を満たさない場合は 3.1. sの方を使う

のようになるはずです。
これを関数にすればいいはずです。私ならそうするかな。

投稿2022/01/06 07:44

BeatStar

総合スコア4962

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

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

0

地道にチェックするしかないんじゃないかなあ。

php

1function jikannai($hm) { 2 $j = [['13:00','18:00']]; 3 //$j = [['21:00','24:00'],['00:00','03:00']]; 4 5 foreach ($j as [$s,$e]) if ($s <= $hm && $hm <= $e) return true; 6 return false; 7} 8 9$str = '14:00'; 10if (jikannai($str)) { 11 //時間内だった場合の処理 12}

投稿2022/01/06 07:05

takasima20

総合スコア7464

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

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

0

日をまたぐ場合、またがない場合、両方を成立させるコードを簡素に書く

判定処理をユーザー関数化して、
比較する時刻が0時またぎするかどうか判別の上で、
丁寧に分岐処理するしかないです。

簡素に書きたければ、
日付成分を持たせてDateTimeクラスを使うとか、
Carbon使うとかしたらいいです。

Carbon - A simple PHP API extension for DateTime.

時刻のみの文字列データであるとして、
当日の3時なのか翌日の3時なのかを判定するなら、
単に翌日なら時刻に24を加えてしまえば大小関係に破綻はないですよね。
つまり、3時→27時として扱えば。
"3:00"だと比較しづらいので"03:00"とゼロ詰めする前提での話になりますが。

投稿2022/01/06 06:44

編集2022/01/06 07:08
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問