В настоящее время я пытаюсь выполнить функцию "время назад", но по какой-то причине она дает мне NaN для одного из результатов.
Я использую слегка модифицированную версию этогокусок кода (находится по адресу: http://www.sitepoint.com/create-your-own-twitter-widget-3/)
if ($this->DateFormat == 'friendly') {
// friendly date format
$ival = $now->diff($stime);
$yr = $ival->y;
$mh = $ival->m + ($ival->d > 15);
if ($mh > 11) $yr = 1;
$dy = $ival->d + ($ival->h > 15);
$hr = $ival->h;
$mn = $ival->i + ($ival->s > 29);
if ($yr > 0) {
if ($yr == 1) $date = 'last year';
else $date = $yr . ' years ago';
}
else if ($mh > 0) {
if ($mh == 1) $date = 'last month';
else $date = $mh . ' months ago';
}
else if ($dy > 0) {
if ($dy == 1) $date = 'yesterday';
else if ($dy < 8) $date = $dy . ' days ago';
else if ($dy < 15) $date = 'last week';
else $date = round($dy / 7) . ' weeks ago';
}
else if ($hr > 0) {
$hr += ($ival->i > 29);
$date = $hr . ' hour' . ($hr == 1 ? '' : 's') . ' ago';
}
else {
if ($mn < 3) $date = 'just now';
else $date = $mn . ' minutes ago';
}
}
(проблемная строка - строка с round($dy / 7)
. Я создал набор возможных значений для проверкирезультаты, и это дает мне NaN на дату -29 дней. Дело в том, что это происходит только тогда, когда я повторяю функцию снова и снова. Если я просто проверяю -29 дней в одиночку, он выводит мне правильный 4значение недели.
Есть идеи, как мне избежать / исправить это?
Редактировать
Скорее всего, это ошибка в PHP.
Если я заставлю код выполнить деление и округление дважды, NaN никогда не появится.
// do estimate of how many weeks ago
$round = round($days / 7, 0);
$round = round($days / 7, 0);
$date = $round . ' weeks ago';
Я заметил это, потому что в моих тестовых циклах первое значение, которое инициировало вычисление недель (учитываяЯ делал более одного расчета) дал бы NaN.