PHP5の質問です。


例えば、
2007-11-16T00:00:00+09:00
の日付を
2007-11-16

2007-11 00:00
にしたいのですがどのように書けばよろしいのでしょうか?
よろしくお願いしますm(_ _)m

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/11/22 01:01:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tezcello No.2

回答回数460ベストアンサー獲得回数69

ポイント27pt

時刻を表す文字列のうち、時・分・秒のどれが省略されているかわかりませんが、秒だと仮定します。

$string = '2007-11-16T00:00:00+09:00';

preg_match('/^((\d\d\d\d-\d\d)-\d\d)T(\d\d:\d\d):\d\d(.\d\d:\d\d)$/', $string, $res);
$date1 = $res[1]; // 2007-11-16
$date2 = $res[2].' '.$res[3]; // 2007-11 00:00

繰り返しはもっと短く書けますが、元の文字列と比較しやすくする為に冗長にしています。

http://www.php.net/manual/ja/reference.pcre.pattern.syntax.php

文字列をタイムスタンプに変換する関数もあるので、これを使えば最初の回答者さんの手法も使えるのでは?

http://jp2.php.net/manual/ja/function.strtotime.php

id:seadwell

返事が遅くなり申し訳ありません。

わざわざご丁寧なご回答ありがとうございます。

動作確認しました。

ありがとうございました。

2007/11/22 00:56:40

その他の回答2件)

id:kyosh No.1

回答回数143ベストアンサー獲得回数5

ポイント27pt

現在のシステム時間の場合、

2007-11-16形式で表示

date('Y-m-d');

2007-11 00:00で表示

date('Y-m H:i');

でしょうか。


日付指定の場合、それぞれ

date('Y-m-d', mktime(0, 0, 0, 11, 16, 2007));

date('Y-m H:i', mktime(0, 0, 0, 11, 16, 2007));

でいいと思います。


※蛇足ですが、、、

PHP5.1.0からデフォルトタイムゾーンを設定する必要ができました。

設定していないとエラーが出る場合があります。

その場合、date_default_timezone_setで設定してください。

公式HP

http://jp.php.net/manual/ja/function.date-default-timezone-set.p...

エラー対処がかいてあるHP

http://www.res-system.com/weblog/item/563

id:seadwell

チョット質問が足りなかったですね。

date()関数で取ってきたのではなく、外部RSSフィードから取得したXMLに上記のような書式で入っています。

それを、配列に移し変える段階で書き換えたいのです。

舌足らずでスイマセンm(_ _)m

2007/11/19 07:46:03
id:tezcello No.2

回答回数460ベストアンサー獲得回数69ここでベストアンサー

ポイント27pt

時刻を表す文字列のうち、時・分・秒のどれが省略されているかわかりませんが、秒だと仮定します。

$string = '2007-11-16T00:00:00+09:00';

preg_match('/^((\d\d\d\d-\d\d)-\d\d)T(\d\d:\d\d):\d\d(.\d\d:\d\d)$/', $string, $res);
$date1 = $res[1]; // 2007-11-16
$date2 = $res[2].' '.$res[3]; // 2007-11 00:00

繰り返しはもっと短く書けますが、元の文字列と比較しやすくする為に冗長にしています。

http://www.php.net/manual/ja/reference.pcre.pattern.syntax.php

文字列をタイムスタンプに変換する関数もあるので、これを使えば最初の回答者さんの手法も使えるのでは?

http://jp2.php.net/manual/ja/function.strtotime.php

id:seadwell

返事が遅くなり申し訳ありません。

わざわざご丁寧なご回答ありがとうございます。

動作確認しました。

ありがとうございました。

2007/11/22 00:56:40
id:Kiske No.3

回答回数39ベストアンサー獲得回数2

ポイント27pt

PHP: date_parse - Manual

http://jp.php.net/date-parse

date_parseに日付文字列食わせれば要素を配列に展開してくれます。

$dates = date_parse("2007-11-16T00:00:00+09:00");

echo $dates["year"]."-".$dates["month"]."-".$dates["day"]; // 2007-11-16

echo $dates["year"]."-".$dates["month"]."-".$dates["day"]." ".$dates["hour"].":".$dates["minute"]; // 2007-11-16 0:0

id:seadwell

返事が遅くなり申し訳ありません。

多忙な日が続き、試すことが出来ずにいました^^;

こちらの動作も無事動作を確認しました。

ありがとうございました。

2007/11/22 00:58:20
  • id:t_shiono
    最初の方の方法で、第2引数をmktimeでの生成の変わりに、strtotimeで文字列をタイムスタンプに変換してあげればOKです。
  • id:seadwell
    コメントでのご指導ありがとうございます。
    次回からは、回答のほうへご記入いただければ幸いです。
    でないと、わずかばかりですが御礼が差し上げることが出来ません。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません