Php счетчик дней от даты до даты

Сколько прошло времени с указанной даты

Вернуть, сколько прошло времени с указанной даты можно через метод DateTime::diff() .

$date = new DateTime('1990-11-05 00:00:00'); echo $date->diff(new DateTime)->format('прошло %d дней %m месяца %y лет'); // прошло 5 дней 2 месяца 29 лет 

Функция ниже возвращает время до указанной даты в сокращённом виде.

function time_ago($datetime) < $interval = date_create('now')->diff($datetime); if ($interval->y >= 1) return $interval->y.' лет';> if ($interval->m >= 1) return $interval->m.' месяца';> if ($interval->d >= 1) return $interval->d.' дней';> if ($interval->h >= 1) return $interval->h.' часов';> if ($interval->i >= 1) return $interval->i.' минут';> return $interval->s.' секунд'; > time_ago(new DateTime('1990-11-05')); // 29 лет time_ago(new DateTime('2017-11-05')); // 2 месяца time_ago(new DateTime('2018-01-05')); // 5 дней 

Авторизуйтесь, чтобы добавлять комментарии

Источник

PHP – сколько дней/часов/минут/секунд осталось до даты

Скрипт на пхп, который выводит оставшееся время до введенной даты.

Как на PHP рассчитать время до указанного события

/** * Счетчик обратного отсчета * * @param mixed $date * @return */ function downcounter($date) < $check_time = strtotime($date) - time(); if($check_time $days = floor($check_time/86400); $hours = floor(($check_time%86400)/3600); $minutes = floor(($check_time%3600)/60); $seconds = $check_time%60; $str = ''; if($days > 0) $str .= declension($days,array('день','дня','дней')).' '; if($hours > 0) $str .= declension($hours,array('час','часа','часов')).' '; if($minutes > 0) $str .= declension($minutes,array('минута','минуты','минут')).' '; if($seconds > 0) $str .= declension($seconds,array('секунда','секунды','секунд')); return $str; > /** * Функция склонения слов * * @param mixed $digit * @param mixed $expr * @param bool $onlyword * @return */ function declension($digit,$expr,$onlyword=false)< if(!is_array($expr)) $expr = array_filter(explode(' ', $expr)); if(empty($expr[2])) $expr[2]=$expr[1]; $i=preg_replace('/[^0-9]+/s','',$digit)%100; if($onlyword) $digit=''; if($i>=5 && $i<=20) $res=$digit.' '.$expr[2]; else < $i%=10; if($i==1) $res=$digit.' '.$expr[0]; elseif($i>=2 && $i <=4) $res=$digit.' '.$expr[1]; else $res=$digit.' '.$expr[2]; >return trim($res); >
  • downcounter() – функция счетчика обратного отсчета
  • declension() – вспомогательная функция, для склонения слов

Вводим дату события, которая обязательно должна быть больше текущей. Применять функцию подсчета даты можно так:

Как вы понимаете, вешать скрипт, который отправляет ajax запрос на сервер каждую секунду, не очень хорошо :). В следующих статьях вы узнаете как при помощи js показывать актуальное время.

Источник

Php счетчик дней от даты до даты

БлогNot. PHP: делаем калькулятор дат и подсчёт дней по-современному

PHP: делаем калькулятор дат и подсчёт дней по-современному

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

В качестве первого примера смоделируем скрипт по ссылке выше, не забудем и про определение дней недели.

Нам понадобятся 2 объекта класса DateTime — $dstart для начальной даты периода, $dend для конечной. Начальной датой по умолчанию будем считать сегодняшнюю, а конечной — 31 декабря текущего года. Если же сегодня и есть 31 декабря, прибавим к году единичку. Кроме того, если даты начала и конца периода уже были переданы скрипту методом $_POST , их нужно записать в $dstart и $dend вместо значений по умолчанию.

Когда значения дат настроены, остаётся вычислить интервал между ними методом DateTime::diff. При этом мы вычисляем интервал абсолютным, то есть, разрешаем конечную дату делать меньше начальной.

Вот какой кусочек кода вышел:

format('Y-m-d')); if ($month==12 and $day==31) $year++; $dend = new DateTime($year.'-12-31'); if (isset($_POST['date2'])) $dend = new DateTime($_POST['date2']); $interval = $dstart->diff($dend,true); ?>

Затем выведем форму, используя современную компоненту , появившуюся в HTML5.

К сожалению, эту компоненту с удобным встроенным календариком и встроенной проверкой корректности данных до сих пор поддерживают не все браузеры. На данный момент всё сработает в Chrome 20+, Opera 10.1+, Android 4.4+, а вот в Internet Explorer или Firefox ничего не выйдет.

Начальная дата: format('Y-m-d'); ?>" autofocus/> Конечная дата: format('Y-m-d'); ?>"/>

Даты передаются компоненте всегда в формате ГГГГ-ММ-ДД .

После формы основная часть скрипта использует найденный $interval для форматирования и печати данных. Про форматы для DateTime::format говорится тут, они те же самые. Служебный метод get_word_form помогает правильно склонять слова «дней», «лет» и т.п.

Период: '. $dstart->format('d.m.Y').', '.$weekdays[$dstart->format('w')]. ' - '.$dend->format('d.m.Y').', '.$weekdays[$dend->format('w')].'

'; $a = $interval->format('%a'); echo '

'.$a.' '.get_word_form ($a,'д','ень','ня','ней').'; '; $y = $interval->format('%y'); echo $y.' '.get_word_form ($y,'','год','года','лет').', '; $m = $interval->format('%m'); echo $m.' '.get_word_form ($m,'месяц','','а','ев').', '; $d = $interval->format('%d'); echo $d.' '.get_word_form ($d,'д','ень','ня','ней').'

'; > function get_word_form ($n,$word,$o1,$o2,$o5) < //Получить нормальное окончание для слова $word и числа объектов $n. //Параметры: //$o1 - окончание для числа *1, //$o2 - окончание для *2-*4, //$o5 - окончание для чисел *5-*9,*0,*11-*19 if ($n%100>10 and $n%1004) $word.=$o5; else if ($n%10>1 and $n%10 <5) $word.=$o2; else $word.=$o1; return $word; >?>

Этому скрипту требуется PHP версии не ниже 5.3, но надёжнее будет 5.3.13 и выше, помнится, в 5.3.5 находились баги с интервалами, а в 5.3.13 и 5.4.X вроде бы, таковых не обнаружено. Кодировка файла предполагается Юникод (UTF-8).

Кстати, если бы мы захотели напечатать вcе даты найденного периода «в столбик», это можно было бы сделать так (перед закрывающим тегом ?> ):

//Распечатать список дат $interval = new DateInterval('P1D'); $period = ($day'.$dt->format('d-m-Y');

Все форматы, применимые для интервалов дат, можно посмотреть тут.

С точки зрения программирования в коде также поучительно, что объекты нельзя «просто присваивать» по типу $dend = $dstart , присвоится по ссылке. Про клонирование объектов см., например, здесь.

Теперь напишем калькулятор, позволяющий прибавить к заданной дате положительное или отрицательное количество дней, как в этом старом скрипте. Скрипт может принимать методом $_POST дату и количество дней $day , по умолчанию ставится текущая дата, а $day=0 . Обратите внимание, что для интервала $interval нужно в любом случае задать положительное количество дней, а «перевернуть» расчёт, считая даты от большей к меньшей, позволит свойство invert компоненты DateInterval .

format('Y-m-d')); $interval = new DateInterval('P'.abs($day).'D'); if ($day<0) $interval->invert = 1; $dend->add ($interval); ?>

Форма, кроме компоненты , будет содержать и специализированную компоненту для ввода числового значения , её поддерживают также не все браузеры, хотя и побольше, чем для даты. При этом Android для типа number на момент написания заметки не поддерживает атрибуты step , min и max .

Начальная дата: format('Y-m-d'); ?>" autofocus/> />

Часть скрипта после кода формы окажется совсем простой, мы лишь отформатируем и выведем данные из дат $dstart и $dend .

Период: '. $dstart->format('d.m.Y').', '.$weekdays[$dstart->format('w')]. ' - '.$dend->format('d.m.Y').', '.$weekdays[$dend->format('w')].'

'; ?>

26.11.2015, 14:15 [10649 просмотров]

Источник

Как определять количество лет, месяцев, дней между датами?

Подскажите, как определять сколько прошло времени(лет, месяцев, дней) между двумя датами. Допустим есть первая дата — 2016.08.16 и вторая — 2010.03.15. Между ними нужно определить период.

Как посчитать количество дней между датами?
У меня возник такой вопрос как можно пасчитать количество дней между датами. Вот у меня есть.

Количество лет, месяцев, дней между датами
Здравствуйте. Может подскажите как вывести количество лет месяцев дней между двумя датами? спасибо.

Возврат кол-ва лет, месяцев, дней, часов, минут, секунд между датами
Нужно написать функцию которая возвращает в виде символьной строки количество лет, месяцев, дней.

$firstDate = '2016.08.16'; $secondDate = '2010.03.15'; $firstDateTimeObject = new DateTime($firstDate); $secondDateTimeObject = new DateTime($secondDate); $delta = $secondDateTimeObject->diff($firstDateTimeObject); echo $delta->format('y'); // года echo $delta->format('m'); // месяца echo $delta->format('d'); // дни

Только ошибка:
Fatal error: Uncaught exception ‘Exception’ with message ‘DateTime::__construct() [datetime.—construct]: Failed to parse time string (2016.08.16) at position 5 (0): Double time specification’ in C:\OpenServer\domains\mysite.local\vkdate.php:5 Stack trace: #0 C:\OpenServer\domains\mysite.local\vkdate.php(5): DateTime->__construct(‘2016.08.16’) #1 thrown in C:\OpenServer\domains\mysite.local\vkdate.php on line 5

$firstDateTimeObject = DateTime::createFromFormat('Y.m.d', $firstDate); $secondDateTimeObject = DateTime::createFromFormat('Y.m.d', $secondDate);
echo $delta->format('%y'); // года echo $delta->format('%m'); // месяца echo $delta->format(%'d'); // дни
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
 $t = "2006-09-23T20:27:12+03:00"; $d = strtotime(date("Y", strtotime($t)).'-'.date("n", strtotime($t)).'-'.date("d", strtotime($t))); $days = floor((strtotime(date("Y-m-d")) - $d) / 86400); echo $days; //возвращает 3615(так и должно быть) $firstDate = date("Y-m-d"); $secondDate = $d; //сюда надо как то вставить $d, убрав что-то из переменной, но так чтобы результат $days не изменился $firstDateTimeObject = DateTime::createFromFormat('Y-m-d', $firstDate); $secondDateTimeObject = DateTime::createFromFormat('Y-m-d', $secondDate); $delta = $secondDateTimeObject->diff($firstDateTimeObject); echo $delta->format('%y')."лет 
"
; // года echo $delta->format('%m')."месяцев
"
; // месяца echo $delta->format('%d')."дней
"
; // дни ?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
 $t = "2006-09-23T20:27:12+03:00"; $d = date("Y", strtotime($t)).'-'.date("n", strtotime($t)).'-'.date("d", strtotime($t)); $days = floor((strtotime(date("Y-m-d")) - strtotime($d)) / 86400); echo $days; //возвращает 3615(так и должно быть) $firstDate = date("Y-m-d"); $secondDate = $d; $firstDateTimeObject = DateTime::createFromFormat('Y-m-d', $firstDate); $secondDateTimeObject = DateTime::createFromFormat('Y-m-d', $secondDate); $delta = $secondDateTimeObject->diff($firstDateTimeObject); echo $delta->format('%y')."лет 
"
; // года echo $delta->format('%m')."месяцев
"
; // месяца echo $delta->format('%d')."дней
"
; // дни

Вычислить количество месяцев и дней между датами
В общем-то не охота писать такой код самому. Как уже имеющими средствами (тем же DateTime).

Рассчитать количество месяцев и дней между двумя датами
Нужна ваша помощь. Необходимо расчитать количество месяц и дней или только количество дней между.

Количество месяцев и дней между двумя датами в четырех ячейках
Помогите пожалуйста переделать макрос. Нужно что бы работал с 1-го по 20-й листы, Данные.

Количество месяцев и дней между двумя датами в четырех ячейках
Помогите пожалуйста переделать макрос. Нужно что бы работал с 1-го по 20-й листы, Данные.

Источник

Читайте также:  Split for bytes python
Оцените статью