PHP Дата Вопрос - PullRequest
6 голосов
/ 25 июня 2009

Я пытаюсь сделать немного математики, используя даты в PHP. Я изменяю чат и хочу реализовать следующие функции.


Если дата публикации = сегодня, время возврата почты

иначе, если дата = вчера, вернуть «вчера»

else date = X дней назад


Как бы я использовал функции даты в php, чтобы вычислить, сколько дней назад есть временная метка (временная метка отформатирована во времени UNIX)

Ответы [ 6 ]

8 голосов
/ 25 июня 2009

Попробуйте это:

$shoutDate = date('Y-m-d', $shoutTime);
if ($shoutDate == date('Y-m-d'))
    return date('H:i', $shoutTime);

if ($shoutDate == date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - 1, date('Y'))))
    return 'yesterday';

return gregoriantojd(date('m'), date('d'), date('y')) - gregoriantojd(date('m', $shoutTime), date('d', $shoutTime), date('y', $shoutTime)) . ' days ago';
3 голосов
/ 25 июня 2009

Используйте тот факт, что время хранится в секундах:

 $days = floor(($shoutTime - time()) / 86400) + 1; // 86400 = 24*60*60

 switch ($days) { 
   case 0:
     return date('H:i', $shoutTime);
   case -1:
     return 'yesterday';
   case 1:
     return 'tomorrow';
 }

 return "$days ago";
3 голосов
/ 25 июня 2009

В php 5.3.0 или выше вы можете использовать DateTime :: diff (он же date_diff ()).

Практически на любом php вы можете конвертировать даты в метки времени Unix и делить разницу между ними на 86400 (1 день в секундах).

1 голос
/ 25 июня 2009

Не думаю, что было указано, что вы можете использовать strtotime , чтобы получить "Вчера". Это делает его более читаемым (и его легче запомнить), чем вычисление дат «вручную», и, вероятно, также менее подвержено ошибкам.

$ int = strtotime («Вчера»);


if(date('Y-m-d', $shoutTime) == date('Y-m-d') {
    return date('H:i:s', $shouTime);
} elseif(date('Y-m-d', $shoutTime) == date('Y-m-d', strtotime('Yesterday')) {
    return "Yesterday.";
} else {
  $days = floor($shoutTime - time() / 86400);
  return "$days ago.";
}
0 голосов
/ 25 июня 2009

Попробуйте использовать date_parse.
Из руководства:

<?php
print_r(date_parse("2006-12-12 10:00:00.5"));
?> 

Распечатает

Array
(
    [year] => 2006
    [month] => 12
    [day] => 12
    [hour] => 10
    [minute] => 0
    [second] => 0
    [fraction] => 0.5
    [warning_count] => 0
    [warnings] => Array()
    [error_count] => 0
    [errors] => Array()
    [is_localtime] => 
)
0 голосов
/ 25 июня 2009

Используйте класс DateTime, и у вас есть метод diff .

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