代码之家  ›  专栏  ›  技术社区  ›  Joe Morgan

从XML构造PHP字符串

  •  1
  • Joe Morgan  · 技术社区  · 17 年前

    我正在尝试将以下XML转换为时间:

     <time hour="18" minute="05" timezone="Eastern" utc-hour="-4" utc-minute="00" /> 
    

    我正在使用simpleXML解析XML,并将其存储在类中。我还尝试打印以下内容:

    print strtotime($x->time->attributes()->hour . ":" . $x->time->attributes()->minute) . "<br>\n";
    

    我从那张照片上得到的结果是这样的:

    1249254300
    

    我想我期望的结果是 18:05 下午6点05分

    有什么方法可以让它转换成我期望的样式吗?另外,如果我将时区添加到末尾,有没有办法让它明白这一点?

    3 回复  |  直到 17 年前
        1
  •  4
  •   nickf    17 年前

    我建议不要在这里使用strtotime。相反尝试 mktime .

    $time=mktime($x->time->attributes()->hour,$x->time->attributes()->minute,0,0,0,0)
    

    此外,还需要格式化时间戳(打印出来的是Unix表示)。你可以用 date 功能。

    date("H:i", $time);
    
        2
  •  1
  •   VolkerK    17 年前

    你可以把它做成表格 strtotime() 了解(包括时区信息)

    <?php
    $x = new SimpleXMLElement('<x>
        <time hour="18" minute="05" timezone="Eastern" utc-hour="-4" utc-minute="00" />
    </x>');
    
    $ts = sprintf('%02d:%02d %+03d%02d', $x->time['hour'], $x->time['minute'], $x->time['utc-hour'], $x->time['utc-minute']);
    $ts = strtotime($ts);
    echo gmdate(DateTime::RFC1123, $ts), "\n", date(DateTime::RFC1123, $ts);
    

    我的本地时区是CET/CEST(在本例中是UTC+2),因此脚本将打印

    Mon, 03 Aug 2009 22:05:00 +0000
    Tue, 04 Aug 2009 00:05:00 +0200
    
        3
  •  1
  •   Alana Storm    17 年前

    这个 strToTime 函数将以字符串格式识别日期或时间,然后将其转换为unix时间戳(unix epoch以来的秒数(unix epoch是1970年1月1日,是UTC的午夜)。

    所以,你需要做的是把你的 strToTime function, and use the date function to format them in a more human readable way

    //24 hour clock
    print date(
          'H:i',
          strtotime($x->time->attributes()->hour . ":" . $x->time->attributes()->minute) . "<br>\n");
    
    //12 hour clock
    print date(
          'h:i a',
          strtotime($x->time->attributes()->hour . ":" . $x->time->attributes()->minute) . "<br>\n");
    

    可以找到完整格式选项 the date entry on php.net