【发布时间】:2011-12-30 15:43:34
【问题描述】:
当您描述您的 EC2 实例时,您会得到一个 XML 节点:-
[launchTime] => 2011-10-14T09:22:37.000Z
我想将此命令与 PHP 一起使用,以测量实例已启动的秒数并采取行动。
在我看来,有很多方法可以解决这个问题,包括爆炸、字符串搜索和正则表达式。但是,最好的方法是什么?
【问题讨论】:
标签: php parsing amazon-ec2
当您描述您的 EC2 实例时,您会得到一个 XML 节点:-
[launchTime] => 2011-10-14T09:22:37.000Z
我想将此命令与 PHP 一起使用,以测量实例已启动的秒数并采取行动。
在我看来,有很多方法可以解决这个问题,包括爆炸、字符串搜索和正则表达式。但是,最好的方法是什么?
【问题讨论】:
标签: php parsing amazon-ec2
$ts = DateTime::CreateFromFormat('Y-m-d\TH:i:s?????', '2011-10-14T09:22:37.000Z');
echo $ts->diff(new DateTime())->format('U');
假设您使用的是 PHP 5.3+
【讨论】:
.000Z 正在使 DateTime 解析器 b0rk,因此它返回 false。
????? 也可以,除了那是五位数,微秒可以在 2-6 之间变化,我认为 ;)
最终答案:
好的,在查看this thread 之后,我决定采用这种方法作为唯一一种似乎可以返回准确测量值的方法:
$dt = DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $date);
$now = new DateTime();
echo ($now->getTimestamp() - $dt->getTimestamp())."\n";
尝试:
在 PHP 5.3 中使用类(无“U”格式):
$dt = DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $arr['launchTime']);
echo (new DateTime())->format('U');
在 PHP 5.3 中使用过程调用(也像最终解决方案一样工作):
$dt = date_create_from_format('Y-m-d\TH:i:s.u\Z', $arr['launchTime']);
$now = date_create();
echo ($now->getTimestamp() - $dt->getTimestamp());
在任何版本中使用strtotime(返回错误时间):
date_default_timezone_set('UTC');
echo time() - strtotime($arr['launchTime']);
【讨论】: