人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP5の質問です。

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

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

●質問者: seadwell
●カテゴリ:ウェブ制作
✍キーワード:00
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kyosh
●27ポイント

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

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

◎質問者からの返答

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

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

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

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


2 ● tezcello
●27ポイント ベストアンサー

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

$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

◎質問者からの返答

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

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

動作確認しました。

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


3 ● mitz
●27ポイント

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

◎質問者からの返答

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

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

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

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



●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ