生活中我们经常用到预约功能,如预约做饭、预约洗衣,需要人为计算与现在的相差的时间,比较麻烦也可能算错,今天分享一段自动计算的函数,直接按结果输入到设备即可,如果设备不能精确到小数,也可以设置允许提前,还是允许推后。

用a表示可以提前不可以推后的情形。
用b表示可以推后不可以提前的情形。

比如做饭,需要完成的时间为07:00,可以提前一点做好,但是不能推后,不然我们上班要迟到,我们设置为07:00a

比如洗衣服,晚上23:00-07:00电价下浮,不可以提前洗电价不划算,可以推后,我们设置为23:00b

我们用php来分别计算我们在设备上设置的时间:

function shijiancha($time)
{
    $now = date('Y-m-d H:i');
    $last = substr($time, -1);
    $time = str_replace($last, '', $time);
    $next = date('Y-m-d ' . $time);
    if (strtotime($next) < strtotime($now)) {
        $next = date('Y-m-d', strtotime('+1 day')) . ' ' . $time;
    }
    $cha = (strtotime($next) - strtotime($now)) / 3600;
    $cha = number_format($cha, 1);
    $new = explode('.', $cha);
    if ($last == 'b') {
        $set = $new[1] > 0 ? $new[0] + 1 : $new[0]; //推后
    } else {
        $set = $new[0] . '.' . ($new[1] >= 5 ? 5 : 0); //精确到0.5小时
    }

    return ['org' => $time, 'cha' => $cha, 'set' => $set];
}

运行结果:

与预约时间 07:00 实际相差 16.9 小时,可设置 16.5 小时(直接在机器上输入结果即可)
与预约时间 23:00 实际相差 8.4 小时,可设置 9 小时(直接在机器上输入结果即可)

评论