2016-04-05 185 views
0

我正在使用PHP AWS开发工具包获取我的帐户中的所有正在运行的实例。我用下面的API:获取AWS实例的运行时间

$this->ec2Client = Ec2Client::factory(array(
      'profile' => AWS_PROFILE, //contains my credentials 
      'region' => 'ap-northeast-1', 
      'version' => 'latest', 
     )); 

$result = $this->ec2Client->DescribeInstances(array(
      'Filters' => array(
       array('Name' => 'instance-state-name', 'Values' => array('running')), 
      ) 
     )); 

我可以得到所有与LaunchTimeAvailabilityZone信息的运行实例。

它们的值分别是2014-10-31T10:58:35+00:00ap-northeast-1a

基于这些信息,我想计算以分钟计的运行时间。什么是正确的方法来做到这一点?

回答

0

我解决它使用V3以下内容:

function interval_in_minutes($start_time){ 
     return round(abs($start_time->getTimestamp() - 
      (new \DateTime)->getTimestamp())/60); 
    } 

$running_time = interval_in_minutes($instance["LaunchTime"]); 
0

为每个实例的LaunchTime提供的值应该是DateTime的实例。你可以得到多长时间的实例已被越来越LaunchTime和其他DateTime实例之间的区别正在运行:

$interval = $launchTime->diff(new \DateTime('now'), true); 
+0

由于EC2客户端和其他实例可以运行在不同的AZ中,我们是否需要考虑时区? – user3288346

+0

编号计算差异时,'DateTime'对象考虑时区,从EC2的API返回的值是整数(epoch)时间戳。 – giaour

+0

ok,但'launchTime'的返回值是'string',我需要几分钟的时间。所以我尝试了以下内容: '''''''''launch_time = new DateTime($ instance [“LaunchTime”]);' ' $ launch_time-> diff(new \ DateTime('now'),true)' 'echo $ launch_time '分别生产几小时,几分钟,几天。我应该手动转换为分钟吗? – user3288346