Время PHP относительно времени - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь преобразовать мой уже внедренный формат даты:

$dateEntered = date('mdY');

в относительное время, используя эту функцию:

function RelativeTime($dateEntered)

Теперь фактический скрипт, который выполняет всеэто выглядит так:

<?php

function RelativeTime($dateEntered){
    $difference = time() - $dateEntered;
    $periods = array("sec", "min", "hour", "day", "week",
        "month", "years", "decade");
    $lengths = array("60","60","24","7","4.35","12","10");

    if ($difference > 0) { // this was in the past
        $ending = "ago";
    } else { // this was in the future
        $difference = -$difference;
        $ending = "to go";
    }
    for($j = 0; array_key_exists($j,$lengths)&&$difference >= $lengths[$j]; $j++) {
        $difference /= $lengths[$j];
        $difference = round($difference);
        if($difference != 1) $periods[$j].= "s";
        $text = "$difference $periods[$j] $ending";
        return $text;
    }
}

// Check Service Call Status & Mail if found Unpaid    
$query = "SELECT id, account, status, dateEntered FROM service WHERE status = 'Unpaid'";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_row($result)){
    $account = $row[1];
    $status = $row[2];
    $dateEntered = $row[3];

    $timeToSend = RelativeTime(strtotime($dateEntered));

    // mailStatusUpdate($account, $status, $timeToSend);
}

?>

Если я запускаю сценарий, я получаю возвращение «4 десятилетия назад».

У меня есть служебная таблица с одной записью.Переменная $ dateEntered возвращает:

01302012

Это показано в выводе print_r ниже.Я в основном хочу, чтобы это говорило «х дней назад» или что бы это ни было.

Вместо того, чтобы возвращать правильную информацию (например, x дней назад), он возвращает:

 4 decades ago

Очевидно, что это неправильно.Вот строка печати, поэтому вы видите, с чем я работаю:

Array ( [0] => 26 [1] => Example Client [2] => Unpaid [3] => 01302012 ) 1

(хотя я не знаю, что это за "1" в конце.)

Ответы [ 2 ]

0 голосов
/ 30 сентября 2013

Пример использования:

echo time_elapsed_string('2013-05-01 00:22:35');
echo time_elapsed_string('2013-05-01 00:22:35', true);

Выход:

4 months ago
4 months, 2 weeks, 3 days, 1 hour, 49 minutes, 15 seconds ago

Ссылка на функцию.

Если вы хотите добавить поддержку на десятилетия, ее можно просто внедрить, как недели.

0 голосов
/ 02 февраля 2012

Подтвердили ли вы, что при использовании strtotime() получено правильное значение timestamp от исходного значения $dateEntered?

Особенно в этой строке: $timeToSend = RelativeTime(strtotime($dateEntered));

Edit:

Вы также можете попробовать преобразовать исходный формат даты, который у вас был, во что-то вроде YYYY-MM-DD для strtotime(), например:

$dateEntered = substr($dateEntered, 4,4) . '-' . substr($dateEntered, 0, 2) . '-' . substr($dateEntered, 2,2);

Это берет оригинальный формат: 01302012 и переводит его в этот формат: 2012-01-30. Затем вы можете использовать strtotime() так:

strtotime($dateEntered);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...