@arturka_v_10

Как научить скрипт понимать когда было действие (вчера, сегодня)?

Есть функция:

spoiler
// определение дня
function reTime($time){

		$today = time();
		$day24 = time() - 60*60*24; // текущее - 24 часа
		$day48 = time() - 60*60*48; // текущее - 48 часов

		if($time<$day48){
		return date("d.m.Y в H:i", $time);
		}elseif($time < $day24){
        return "Вчера в ".date("H:i",$time);
		}elseif($time > $today){
        return "Завтра в ".date("H:i",$time);
		}else{
		return "Сегодня в ".date("H:i",$time);
		}
	}



вчера написал - вроде работало корректно, как оказалось - рано радовался, сегодня зашел, а он вчерашнее 07.11 обзывает сегодня.

Текущий результат:
1kPJvoIdXRw.jpg

Пытался по вычленению date("d", $time) делать - не прокатило. Подсобите коли знаете как.
  • Вопрос задан
  • 770 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У вас в функции "вчера" - это более 24 часов тому назад. То есть, в полночь практически весь вчерашний день по вашим расчётам - это ещё "сегодня".
function fineDate($time) {
  if ($time >= strtotime('tomorrow + 1 day')) {
    return date("d.m.Y в H:i", $time);
  } else if ($time >= strtotime('tomorrow')) {
    return "Завтра в ".date("H:i",$time);
  } else if ($time >= strtotime('today')) {
    return "Сегодня в ".date("H:i",$time);
  } else if ($time >= strtotime('yesterday')) {
    return "Вчера в ".date("H:i",$time);
  }
  return date("d.m.Y в H:i", $time);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
melodyn
@melodyn
Лучше нативная смерть, чем фреймворковая жизнь.
Всё зависит от того насколько точно нужно определять "вчера". Одни сутки составляют 86400 секунд, если работаешь в unixtime, то самый простой вариант -- определять прошли ли сутки, например так:
$date = strtotime('2017-11-07 14:50');
$today = time();
$oneDay = $today-$date;
if($oneDay < 86400) $dayText = 'Сегодня'; else $dayText = 'Вчера';

echo $dayText;


Иногда бывает полезно добавить в начале кода: setlocale(LC_ALL, 'ru_RU.UTF8');

Примечание: это "направление", но не единственно верный вариант ) Если учитывать время от полуночи и склонять "день/дня/дней", то всё это будет расти и меняться.
Ответ написан
@oxidmod
https://github.com/fightbulc/moment.php

(new \Moment\Moment('2014-03-30T16:58:00', 'CET'))->subtractDays(6)->calendar(); // last week
(new \Moment\Moment('2014-03-30T16:58:00', 'CET'))->subtractDays(1)->calendar(); // yesterday
(new \Moment\Moment('2014-03-30T16:58:00', 'CET'))->calendar(); // today
(new \Moment\Moment('2014-03-30T16:58:00', 'CET'))->addDays(1)->calendar(); // tomorrow
(new \Moment\Moment('2014-03-30T16:58:00', 'CET'))->addDays(3)->calendar(); // next week


Умеет работать с локалями
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы