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

回答編集履歴

5

修正

2019/05/15 12:38

投稿

退会済みユーザー
answer CHANGED
@@ -31,7 +31,7 @@
31
31
  /*
32
32
  * 文字列として処理
33
33
  */
34
- preg_match('/^(\d[4])年+(\d[1,2])月+(\d[1,2])日$/u', $date_org, $matches);
34
+ preg_match('/^(\d{4})年+(\d{1,2})月+(\d{1,2})日$/u', $date_org, $matches);
35
35
  $date_hyphen2 = sprintf('%1$04d-%2$02d-%3$02d', $matches[1], $matches[2], $matches[3]);
36
36
 
37
37
  echo $date_hyphen1;

4

微修正

2019/05/15 12:38

投稿

退会済みユーザー
answer CHANGED
@@ -31,7 +31,7 @@
31
31
  /*
32
32
  * 文字列として処理
33
33
  */
34
- preg_match('/^(\d+)年+(\d+)月+(\d+)日$/u', $date_org, $matches);
34
+ preg_match('/^(\d[4])年+(\d[1,2])月+(\d[1,2])日$/u', $date_org, $matches);
35
35
  $date_hyphen2 = sprintf('%1$04d-%2$02d-%3$02d', $matches[1], $matches[2], $matches[3]);
36
36
 
37
37
  echo $date_hyphen1;

3

追記

2019/05/15 12:35

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,4 @@
1
- 提示されたコード内では`$date_date`が定義されていないです。
1
+ ~~提示されたコード内では`$date_date`が定義されていないです。~~(誤情報だったようです)
2
2
 
3
3
  **追記**
4
4
  マニュアル見ると良いです。
@@ -9,4 +9,32 @@
9
9
  フォーマットに沿ったパーサが用意されています。
10
10
  [DateTime::createFromFormat / date_create_from_format](https://www.php.net/manual/ja/datetime.createfromformat.php)
11
11
 
12
- 日付系はめんどいので、ライブラリを使用するのも一般的かと。
12
+ 日付系はめんどいので、ライブラリを使用するのも一般的かと。
13
+
14
+ **フーマット変換に関しての考え方**
15
+ 誤情報だらけの質問だったせいで、お遊びの回答コードしかつかなかったため補足しておきます。
16
+
17
+ 本件は、フォーマット変換の質問です。
18
+ 元の文字列を「日付」として扱うのであれば、パースと再構築には日付系の関数やライブラリを使用するのが適切です。
19
+ 元の文字列を「文字列」として扱うのであれば、正規表現と書式用の関数で処理すると良いです。
20
+
21
+ サンプルコードを貼っときます。
22
+ ```php
23
+ <?php
24
+ $date_org = '2019年5月13日';
25
+ // $date_org = '2019年2月29日';
26
+
27
+ /*
28
+ * 日付として処理
29
+ */
30
+ $date_hyphen1 = DateTime::createFromFormat('Y年m月d日', $date_org)->format('Y-m-d');
31
+ /*
32
+ * 文字列として処理
33
+ */
34
+ preg_match('/^(\d+)年+(\d+)月+(\d+)日$/u', $date_org, $matches);
35
+ $date_hyphen2 = sprintf('%1$04d-%2$02d-%3$02d', $matches[1], $matches[2], $matches[3]);
36
+
37
+ echo $date_hyphen1;
38
+ echo PHP_EOL;
39
+ echo $date_hyphen2;
40
+ ```

2

追記

2019/05/15 12:31

投稿

退会済みユーザー
answer CHANGED
@@ -3,4 +3,10 @@
3
3
  **追記**
4
4
  マニュアル見ると良いです。
5
5
  [strtotime](https://www.php.net/manual/ja/function.strtotime.php)
6
- > この関数は英語の書式での日付を含む文字列が指定されることを期待しており、 now で与えられたその形式から Unix タイムスタンプ (1970 年 1 月 1 日 00:00:00 UTC からの経過秒数) への変換を試みます。 now が指定されていない場合は現在日時に変換します。
6
+ > この関数は英語の書式での日付を含む文字列が指定されることを期待しており、 now で与えられたその形式から Unix タイムスタンプ (1970 年 1 月 1 日 00:00:00 UTC からの経過秒数) への変換を試みます。 now が指定されていない場合は現在日時に変換します。
7
+
8
+ **さらに追記**
9
+ フォーマットに沿ったパーサが用意されています。
10
+ [DateTime::createFromFormat / date_create_from_format](https://www.php.net/manual/ja/datetime.createfromformat.php)
11
+
12
+ 日付系はめんどいので、ライブラリを使用するのも一般的かと。

1

追記

2019/05/13 10:35

投稿

退会済みユーザー
answer CHANGED
@@ -1,1 +1,6 @@
1
- 提示されたコード内では`$date_date`が定義されていないです。
1
+ 提示されたコード内では`$date_date`が定義されていないです。
2
+
3
+ **追記**
4
+ マニュアル見ると良いです。
5
+ [strtotime](https://www.php.net/manual/ja/function.strtotime.php)
6
+ > この関数は英語の書式での日付を含む文字列が指定されることを期待しており、 now で与えられたその形式から Unix タイムスタンプ (1970 年 1 月 1 日 00:00:00 UTC からの経過秒数) への変換を試みます。 now が指定されていない場合は現在日時に変換します。