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

回答編集履歴

8

追記

2016/01/27 09:36

投稿

coba-coba
coba-coba

スコア1409

answer CHANGED
@@ -1,5 +1,6 @@
1
1
  PHPのdate()とstrtotime()を併用したらどうでしょう。閏年にも対応しています。
2
2
  それに、カスタマイズも容易です。
3
+ (追記:ただし、2038年問題には対応していません。DateTimeクラスを使うのがベターです。)
3
4
 
4
5
  例えば、次のコードを実行すると、100日前から100日後の日時を表示します。
5
6
  ```PHP
@@ -36,8 +37,8 @@
36
37
 
37
38
  // modifiedでグルーピングし、valueの合計を取得
38
39
  $num = $this->Num->find('all', array(
39
- 'fields'=> array('Num.id', 'Num.modified', 'sum(Num.value) as Num__sumvalue'),
40
+ 'fields'=> array('Num.id', 'Num.modified', 'sum(Num.value) as Num__sumvalue'),
40
- 'group' => array('Num.modified')
41
+ 'group' => array('Num.modified')
41
42
  ));
42
43
 
43
44
  // キーをmodified、値をsumvalueとした連想配列$modified_sumvalueを作成
@@ -53,5 +54,5 @@
53
54
  $this->set(compact('results'));
54
55
 
55
56
  // 連想配列を確認
56
- Debugger::dump($results);
57
+ dump($results);
57
58
  ```

7

修正

2016/01/27 09:36

投稿

coba-coba
coba-coba

スコア1409

answer CHANGED
@@ -50,8 +50,8 @@
50
50
  }
51
51
 
52
52
  // 連想配列をViewで表示できるようにセット
53
- $this->set(compact('modified_sumvalue'));
53
+ $this->set(compact('results'));
54
54
 
55
55
  // 連想配列を確認
56
- Debugger::dump($modified_sumvalue);
56
+ Debugger::dump($results);
57
57
  ```

6

修正

2016/01/21 23:07

投稿

coba-coba
coba-coba

スコア1409

answer CHANGED
@@ -31,7 +31,7 @@
31
31
  ```PHP
32
32
  [コントローラー]
33
33
 
34
- // sumというバーチャルフィールドを用意
34
+ // sumvalueというバーチャルフィールドを用意
35
35
  $this->Num->virtualFields['sumvalue'] = 0;
36
36
 
37
37
  // modifiedでグルーピングし、valueの合計を取得

5

修正

2016/01/21 00:12

投稿

coba-coba
coba-coba

スコア1409

answer CHANGED
@@ -41,7 +41,7 @@
41
41
  ));
42
42
 
43
43
  // キーをmodified、値をsumvalueとした連想配列$modified_sumvalueを作成
44
- $results_tmp = Hash::combine($tweet, '{n}.Tweet.modified', '{n}.Tweet.sumvalue');
44
+ $results_tmp = Hash::combine($num, '{n}.Num.modified', '{n}.Num.sumvalue');
45
45
 
46
46
  // キーをDATETIMEからDATEに変換
47
47
  $results = [];

4

修正

2016/01/21 00:03

投稿

coba-coba
coba-coba

スコア1409

answer CHANGED
@@ -32,11 +32,11 @@
32
32
  [コントローラー]
33
33
 
34
34
  // sumというバーチャルフィールドを用意
35
- $this->Num->virtualFields['sum'] = 0;
35
+ $this->Num->virtualFields['sumvalue'] = 0;
36
36
 
37
37
  // modifiedでグルーピングし、valueの合計を取得
38
38
  $num = $this->Num->find('all', array(
39
- 'fields'=> array('Num.id', 'Num.modified', 'sum(Num.value) as Num__sum'),
39
+ 'fields'=> array('Num.id', 'Num.modified', 'sum(Num.value) as Num__sumvalue'),
40
40
  'group' => array('Num.modified')
41
41
  ));
42
42
 

3

修正

2016/01/20 23:41

投稿

coba-coba
coba-coba

スコア1409

answer CHANGED
@@ -41,8 +41,14 @@
41
41
  ));
42
42
 
43
43
  // キーをmodified、値をsumvalueとした連想配列$modified_sumvalueを作成
44
- $modified_sumvalue = Hash::combine($num, '{n}.Num.modified', '{n}.Num.sumvalue');
44
+ $results_tmp = Hash::combine($tweet, '{n}.Tweet.modified', '{n}.Tweet.sumvalue');
45
45
 
46
+ // キーをDATETIMEからDATEに変換
47
+ $results = [];
48
+ foreach ($results_tmp as $key => $value) {
49
+ $results[date('Y-m-d', strtotime($key))] = $value;
50
+ }
51
+
46
52
  // 連想配列をViewで表示できるようにセット
47
53
  $this->set(compact('modified_sumvalue'));
48
54
 

2

コード追記

2016/01/20 03:37

投稿

coba-coba
coba-coba

スコア1409

answer CHANGED
@@ -24,4 +24,28 @@
24
24
  2016/02/17 11:12:13
25
25
  2016/01/01 00:00:00
26
26
  2016/12/31 00:00:00
27
+ ```
28
+
29
+ コード追記
30
+ ---
31
+ ```PHP
32
+ [コントローラー]
33
+
34
+ // sumというバーチャルフィールドを用意
35
+ $this->Num->virtualFields['sum'] = 0;
36
+
37
+ // modifiedでグルーピングし、valueの合計を取得
38
+ $num = $this->Num->find('all', array(
39
+ 'fields'=> array('Num.id', 'Num.modified', 'sum(Num.value) as Num__sum'),
40
+ 'group' => array('Num.modified')
41
+ ));
42
+
43
+ // キーをmodified、値をsumvalueとした連想配列$modified_sumvalueを作成
44
+ $modified_sumvalue = Hash::combine($num, '{n}.Num.modified', '{n}.Num.sumvalue');
45
+
46
+ // 連想配列をViewで表示できるようにセット
47
+ $this->set(compact('modified_sumvalue'));
48
+
49
+ // 連想配列を確認
50
+ Debugger::dump($modified_sumvalue);
27
51
  ```

1

追記

2016/01/19 03:42

投稿

coba-coba
coba-coba

スコア1409

answer CHANGED
@@ -4,7 +4,9 @@
4
4
  例えば、次のコードを実行すると、100日前から100日後の日時を表示します。
5
5
  ```PHP
6
6
  <?php
7
+ // CakePHPでは別途指定するので、いらないかもしれません
7
8
  date_default_timezone_set('Asia/Tokyo');
9
+
8
10
  $from = -100;
9
11
  $to = 100;
10
12
  for ($i=$from; $i<=$to; $i++) {