例えば、
2007-11-16T00:00:00+09:00
の日付を
2007-11-16
と
2007-11 00:00
にしたいのですがどのように書けばよろしいのでしょうか?
よろしくお願いしますm(_ _)m
時刻を表す文字列のうち、時・分・秒のどれが省略されているかわかりませんが、秒だと仮定します。
$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
文字列をタイムスタンプに変換する関数もあるので、これを使えば最初の回答者さんの手法も使えるのでは?
現在のシステム時間の場合、
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
チョット質問が足りなかったですね。
date()関数で取ってきたのではなく、外部RSSフィードから取得したXMLに上記のような書式で入っています。
それを、配列に移し変える段階で書き換えたいのです。
舌足らずでスイマセンm(_ _)m
時刻を表す文字列のうち、時・分・秒のどれが省略されているかわかりませんが、秒だと仮定します。
$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
文字列をタイムスタンプに変換する関数もあるので、これを使えば最初の回答者さんの手法も使えるのでは?
返事が遅くなり申し訳ありません。
わざわざご丁寧なご回答ありがとうございます。
動作確認しました。
ありがとうございました。
PHP: date_parse - Manual
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
返事が遅くなり申し訳ありません。
多忙な日が続き、試すことが出来ずにいました^^;
こちらの動作も無事動作を確認しました。
ありがとうございました。
返事が遅くなり申し訳ありません。
わざわざご丁寧なご回答ありがとうございます。
動作確認しました。
ありがとうございました。