teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

加筆修正

2020/08/24 02:52

投稿

退会済みユーザー
answer CHANGED
@@ -38,4 +38,11 @@
38
38
  }
39
39
  ```
40
40
 
41
- これで30分刻みのループカウンタができています。
41
+ これで30分刻みのループカウンタができています。
42
+
43
+ ---
44
+
45
+ [PHP: 配列 関数 - Manual](https://www.php.net/manual/ja/ref.array.php)
46
+ をよく見てもらって、例えば
47
+ [PHP: array_key_exists - Manual](https://www.php.net/manual/ja/function.array-key-exists.php)
48
+ を使って指定のキーに対応する値を配列が持っているかどうかを検査しながらループカウンタを回すのもご検討ください。

3

加筆修正

2020/08/24 02:52

投稿

退会済みユーザー
answer CHANGED
@@ -26,4 +26,16 @@
26
26
  時刻用ループカウンタを使って回して、
27
27
  時間帯ごとの判定を行うっていう。
28
28
  DateTimeクラスでは、add()/sub()メソッドでDateIntervalクラスを駆使して
29
- 正確に時刻の加減算ができます。
29
+ 正確に時刻の加減算ができます。
30
+
31
+ ```php
32
+ <?php
33
+
34
+ $dt = new DateTime('2020-08-23 00:00:00');
35
+ while ($dt->format('Y-m-d') == '2020-08-23') {
36
+ echo $dt->format('H:i') . PHP_EOL;
37
+ $dt = $dt->add(new DateInterval('PT30M'));
38
+ }
39
+ ```
40
+
41
+ これで30分刻みのループカウンタができています。

2

加筆修正

2020/08/23 13:11

投稿

退会済みユーザー
answer CHANGED
@@ -24,4 +24,6 @@
24
24
  ってやればいいんじゃないかな。
25
25
  ループをデータベース読み出しで回さずに、
26
26
  時刻用ループカウンタを使って回して、
27
- 時間帯ごとの判定を行うっていう。
27
+ 時間帯ごとの判定を行うっていう。
28
+ DateTimeクラスでは、add()/sub()メソッドでDateIntervalクラスを駆使して
29
+ 正確に時刻の加減算ができます。

1

加筆修正

2020/08/23 12:51

投稿

退会済みユーザー
answer CHANGED
@@ -14,4 +14,14 @@
14
14
 
15
15
  PHP上ではDateTimeクラスを使えばデータベースのTIMESTAMP型と親和性が高いです。
16
16
  [PHP: DateTime \- Manual](https://www.php.net/manual/ja/class.datetime.php)
17
- 日付だけ欲しい、時刻だけ欲しい、どういう場合でもformat()メソッドで一発です。
17
+ 日付だけ欲しい、時刻だけ欲しい、どういう場合でもformat()メソッドで一発です。
18
+
19
+ そういうクエリーを考えるのもコツが必要なので、
20
+ 基本的な考え方として、
21
+ 0:00~23:30のループをしながら、
22
+ テーブルのデータと比較して、
23
+ 一致する時間帯なら云々、そうでないなら云々
24
+ ってやればいいんじゃないかな。
25
+ ループをデータベース読み出しで回さずに、
26
+ 時刻用ループカウンタを使って回して、
27
+ 時間帯ごとの判定を行うっていう。