计算当前时间是否是终止我的EC2实例的好时机?

时间:2016-03-04 08:32:44

标签: php datetime

亚马逊向您收取EC2使用一小时的费用,即使您只运行了10分钟的实例。因此,在终止任何未使用的EC2实例之前,我想检查launch time - current time是否不到10分钟。

让我通过一个例子向您解释:

我们说我在2016-Feb-01 13:02:22启动我的EC2实例。然后我想终止它,只有当时间是从发布时间起10分钟(无论日期)。因此,如果它是16:58:54那么这意味着当前时间是终止它的好时机,因为我将再次向17:02:22开帐单(按照此示例大约4分钟)?另一方面,如果时间是13:03:01那么现在不是一个好时机,因为我已经按时计费了。

以下是我可以提出的问题,但当前时间为58且发布时间为02等时,它无法正常工作

<?php

$launch = '2016-03-03 13:02:22';
$now = '2016-03-04 12:58:22';

$epochLaunch = strtotime(sprintf('1970-01-01 00:%02d:00', date('i', strtotime($launch))));
$epochNow = strtotime(sprintf('1970-01-01 00:%02d:00', date('i', strtotime($now))));

echo $epochLaunch - $epochNow;

1 个答案:

答案 0 :(得分:1)

你需要的是这样的东西:

function shouldTerminate($launch, $minsToTerminate, $current = null)
{
    if (!is_null($current)) {
        $current = strtotime($current);
    }
    else {
        $current = time();
    }
    $launchEpoch = strtotime($launch);  

    return (($current - $launchEpoch) % 3600) > (3600 - $minsToTerminate * 60);
}

echo shouldTerminate('2016-03-03 13:02:22', 4, '2016-03-03 13:50:25') ? 'Terminate': 'Do not terminate', PHP_EOL;
echo shouldTerminate('2016-03-03 13:02:22', 4, '2016-03-03 13:59:25') ? 'Terminate': 'Do not terminate', PHP_EOL;
echo shouldTerminate('2016-03-03 13:02:22', 4, '2016-03-05 13:58:25') ? 'Terminate': 'Do not terminate', PHP_EOL;
echo shouldTerminate('2016-03-03 13:02:22', 4, '2016-03-05 13:03:25') ? 'Terminate': 'Do not terminate', PHP_EOL;
echo shouldTerminate('2016-03-03 13:02:22', 4, '2016-03-05 13:51:25') ? 'Terminate': 'Do not terminate', PHP_EOL;

以上的输出将是:

Do not terminate
Terminate
Terminate
Do not terminate
Do not terminate

<强> USAGE: shouldTerminate()函数可以直接使用,为其提供启动时间字符串,允许终止的整个小时之前的分钟以及要测试的可选日期时间字符串参数 - 或者函数将使用当前时间你不提供任何东西。

查看https://eval.in/530108

上的代码

<强>说明: 这个想法是你对整整一小时的剩余时间感兴趣。这就是为什么你从两个纪元时间的差异中得到一小时的剩余秒数,即

$current - $launchEPoch % 3600

上面的内容将告诉你他们已经过去的整整一小时(剩余秒数)不合适的秒数以及这些秒数大于剩余小时数减去你设定的阈值的时间,即> 3600 - $minsToTerminate * 60然后您可以根据您的规则终止实例。