[PHP-users 35085] ISO 8601 日付が上手く parse されない

shige02 @ mac.com shige02 @ mac.com
2010年 4月 1日 (木) 20:20:47 JST


重松です。

表題の通りなんですが、今 XML からデータを読み込む必要があり、ISO 8601 日付という形式らしいんですが、

<ContactXMLItem lastModifiedDate="2009-04-10T01:57:00+09:00">

というような感じで整形されています。

ちょっと古いのですが、http://www.kanzaki.com/docs/html/dtf.html を読むと、XML の場合、「W3C-DTFの年月日時分秒をフルに表すフォーマット(5)(6)がdateTime型として定義されています。」というくだりがあり、要するに、秒の部分に、小数点以下が来ることもあるように読めるのですが、自分が読み込もうとしているデータにはそのような形式は見受けられませんでした。

こういうのって、RSS リーダーなんか XML なんだから、よく使うと思うんで、自分で書かないでもあるだろうと思って調べて見たのですが、php 5 から date() に c というフォーマットが追加になったようで、これを使えば楽できると思ったんですが、動きません。

何か勘違いしているんでしょうか?

<?php

date_default_timezone_set('Asia/Tokyo');

$str = date('c');
echo "$str\n\n";
var_dump(date_parse_from_format('c',$str));

?>

2010-04-01T20:15:51+09:00

array(12) {
  ["year"]=>
  bool(false)
  ["month"]=>
  bool(false)
  ["day"]=>
  bool(false)
  ["hour"]=>
  bool(false)
  ["minute"]=>
  bool(false)
  ["second"]=>
  bool(false)
  ["fraction"]=>
  bool(false)
  ["warning_count"]=>
  int(0)
  ["warnings"]=>
  array(0) {
  }
  ["error_count"]=>
  int(2)
  ["errors"]=>
  array(2) {
    [0]=>
    string(35) "The format separator does not match"
    [1]=>
    string(13) "Trailing data"
  }
  ["is_localtime"]=>
  bool(false)
}

$ php -v
PHP 5.3.1 (cli) (built: Feb 11 2010 02:32:22) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

-- 
Osamu Shigematsu



PHP-users メーリングリストの案内