human time php
snippet in php

human time php

user6610

// for a human time string like: "It's around ten past twelve" 
// usage: echo 'It\'s ' . humanTime(date('h'), date('i'));

function humanTime($hour, $min) {
    $times = [
        0 => '%s o\'clock',
        2 => 'a couple of mins past %s',
        5 => 'five past %s',
        8 => 'around ten past %s',
        10 => 'ten past %s',
        15 => 'quarter past %s',
        20 => 'twenty past %s',
        25 => 'twenty five past %s',
        27 => 'around half past %s',
        30 => 'half past %s',
        33 => 'around thirty five past %s',
        35 => 'thirty five past %s',
        40 => 'twenty to %s',
        43 => 'around quarter to %s',
        45 => 'quarter to %s',
        47 => 'about ten to %s',
        50 => 'ten to %s',
        53 => 'about five to %s',
        55 => 'five to %s'
    ];
    
    $hourWord = [
        'one',
        'two',
        'three',
        'four',
        'five',
        'six',
        'seven',
        'eight',
        'nine',
        'ten',
        'eleven',
        'twelve'
    ];

    $hour = (int) $hour;
    $min = (int) $min;
    
    $closest = null;
    foreach ($times as $key => $item) 
        if ($closest === null || abs($min - $closest) > abs($key - $min)) $closest = $key;
    
    if ($hour === 0) $hour = 12;
    
    if ($min > 40) $hour = $hour === 12 ? 1 : $hour + 1;

    return sprintf($times[$closest], $hourWord[(int) $hour - 1]);
}