Работа с датами в php

Время выполнения скрипта

Способ #1

Функция с переданным значением возвращает число секунд, прошедших с полуночи , причём это значение подсчитано до сотых долей секунды. Затем идёт сам скрипт (исполняемый код), который мы и проверяем. В последней строкой будет разница между текущим временем (после выполнения скрипта) и тем, что мы зафиксировали при старте скрипта. Разница времени после выполнения скрипта и времени до начала его работы, и есть время выполнения скрипта.

$start = microtime(true);

// исполняемый код ...

echo '<br>===============================================================';
echo 'Время выполнения скрипта: ' . (microtime(true) - $start) . ' sec.';

Результат:

Время выполнения скрипта: 0.16499996185303 sec.

Способ #2

Можно вместо брать значение из переменной , которая содержит время запроса к серверу. Вычисление времени выполнения происходит за исполняемым кодом.

// исполняемый код ...

$time = microtime(true) - $_SERVER;
echo $time . ' sec.';

Если на сервере установлен :

// исполняемый код ...

echo xdebug_time_index() . ' sec.';

Способ #4

Можно подсчитать среднее значение выполнения скрипта и записать результат в логи:

$start = microtime(true);
 
// исполняемый код ...
 
$time = round(microtime(true) - $start, 3);
 
$f = fopen('time.log', 'a');
fwrite($f, $time . PHP_EOL);
fclose($f);
 
$log = file('time.log');
$result = round(array_sum($log) / count($log), 3); 
echo $result . ' sec.';

Описание

date

Возвращает время, отформатированное в соответствии с аргументом

format, используя метку времени, заданную

аргументом timestamp или текущее системное

время, если timestamp не задан.

Другими словами, timestamp является

необязательным и по умолчанию равен значению, возвращаемому функцией

time().

Таблица 1. В параметре format распознаются

следующие символы

Символ в строке format Описание Пример возвращаемого значения
a Ante meridiem или Post meridiem в нижнем регистре am или pm
A Ante meridiem или Post meridiem в верхнем регистре AM или PM
B Время в стадарте Swatch Internet От 000 до 999
c Дата в формате ISO 8601 (добавлено в PHP 5) 2004-02-12T15:19:21+00:00
d День месяца, 2 цифры с ведущими нулями от 01 до 31
D Сокращенное наименование дня недели, 3 символа от Mon до Sun
F Полное наименование месяца, например January или March от January до December
g Часы в 12-часовом формате без ведущих нулей От 1 до 12
G Часы в 24-часовом формате без ведущих нулей От до 23
h Часы в 12-часовом формате с ведущими нулями От 01 до 12
H Часы в 24-часовом формате с ведущими нулями От 00 до 23
i Минуты с ведущими нулями 00 to 59
I (заглавная i) Признак летнего времени 1, если дата соответствует летнему времени, иначе otherwise.
j День месяца без ведущих нулей От 1 до 31
l (строчная ‘L’) Полное наименование дня недели От Sunday до Saturday
L Признак високосного года 1, если год високосный, иначе .
m Порядковый номер месяца с ведущими нулями От 01 до 12
M Сокращенное наименование месяца, 3 символа От Jan до Dec
n Порядковый номер месяца без ведущих нулей От 1 до 12
O Разница с временем по Гринвичу в часах Например: +0200
r Дата в формате RFC 2822 Например: Thu, 21 Dec 2000 16:01:07 +0200
s Секунды с ведущими нулями От 00 до 59
S Английский суффикс порядкового числительного дня месяца, 2 символа

st, nd, rd или

th. Применяется совместно с j

t Количество дней в месяце От 28 до 31
T Временная зона на сервере Примеры: EST, MDT
U

Количество секунд, прошедших с начала Эпохи Unix (The Unix

Epoch, 1 января 1970, 00:00:00 GMT)

См. также time()
w Порядковый номер дня недели От (воскресенье) до 6 (суббота)
W Порядковый номер недели года по ISO-8601, первый день недели — понедельник (добавлено в PHP 4.1.0) Например: 42 (42-я неделя года)
Y Порядковый номер года, 4 цифры Примеры: 1999, 2003
y Номер года, 2 цифры Примеры: 99, 03
z Порядковый номер дня в году (нумерация с 0) От до 365
Z

Смещение временной зоны в секундах. Для временных зон

западнее UTC это отрицательное число, восточнее UTC — положительное.

От -43200 до 43200

Любые другие символы, встреченные в строке format,

будут выведены в результирующую строку без изменений.

Z всегда возвращает при

использовании gmdate().

Пример 1. Примеры использования функции date()

Избежать распознавания символа как форматирующего можно, если экранировать

этот символ с помощью \ Если в сочетании с

\ символ являееся специальным (например,

\t), следует добавлять еще один

\.

Пример 2. Экранирование символов в функции date()

Функции date() и

mktime() для вывода прошедших и будущих дат.

Пример 3.

date() и mktime()

example

Приведем еще несколько примеров использования функции

date(). Помните, что следует экранировать все

символы, которые вы хотите видеть в результате работы функции без

изменений. Это относится и к символам, которые в текущей версии PHP

не распознаются как специальные, так как этим символам может быть

назначено значение в следующих версиях.

Используйте одинарные кавычки для предотвращения преобразования

\n в перевод строки.

Пример 4.

Форматирование с использованием date()

Для форматирования дат на других языках используйте функции

setlocale() и strftime().

См. также описание функций getlastmod(), gmdate(),

mktime(), strftime()

и time().

Parameter Values

Parameter Description
format Required. Specifies the format of the outputted date string. The following characters can be used:

  • d — The day of the month (from 01 to 31)
  • D — A textual representation of a day (three letters)
  • j — The day of the month without leading zeros (1 to 31)
  • l (lowercase ‘L’) — A full textual representation of a day
  • N — The ISO-8601 numeric representation of a day (1 for Monday, 7 for Sunday)
  • S — The English ordinal suffix for the day of the month (2 characters st, nd, rd or th. Works well with j)
  • w — A numeric representation of the day (0 for Sunday, 6 for Saturday)
  • z — The day of the year (from 0 through 365)
  • W — The ISO-8601 week number of year (weeks starting on Monday)
  • F — A full textual representation of a month (January through December)
  • m — A numeric representation of a month (from 01 to 12)
  • M — A short textual representation of a month (three letters)
  • n — A numeric representation of a month, without leading zeros (1 to 12)
  • t — The number of days in the given month
  • L — Whether it’s a leap year (1 if it is a leap year, 0 otherwise)
  • o — The ISO-8601 year number
  • Y — A four digit representation of a year
  • y — A two digit representation of a year
  • a — Lowercase am or pm
  • A — Uppercase AM or PM
  • B — Swatch Internet time (000 to 999)
  • g — 12-hour format of an hour (1 to 12)
  • G — 24-hour format of an hour (0 to 23)
  • h — 12-hour format of an hour (01 to 12)
  • H — 24-hour format of an hour (00 to 23)
  • i — Minutes with leading zeros (00 to 59)
  • s — Seconds, with leading zeros (00 to 59)
  • u — Microseconds (added in PHP 5.2.2)
  • e — The timezone identifier (Examples: UTC, GMT, Atlantic/Azores)
  • I (capital i) — Whether the date is in daylights savings time (1 if Daylight Savings Time, 0 otherwise)
  • O — Difference to Greenwich time (GMT) in hours (Example: +0100)
  • P — Difference to Greenwich time (GMT) in hours:minutes (added in PHP 5.1.3)
  • T — Timezone abbreviations (Examples: EST, MDT)
  • Z — Timezone offset in seconds. The offset for timezones west of UTC is negative (-43200 to 50400)
  • c — The ISO-8601 date (e.g. 2013-05-05T16:34:42+00:00)
  • r — The RFC 2822 formatted date (e.g. Fri, 12 Apr 2013 12:01:05 +0200)
  • U — The seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)

and the following predefined constants can also be used (available since PHP 5.1.0):

  • DATE_ATOM — Atom (example: 2013-04-12T15:52:01+00:00)
  • DATE_COOKIE — HTTP Cookies (example: Friday, 12-Apr-13 15:52:01 UTC)
  • DATE_ISO8601 — ISO-8601 (example: 2013-04-12T15:52:01+0000)
  • DATE_RFC822 — RFC 822 (example: Fri, 12 Apr 13 15:52:01 +0000)
  • DATE_RFC850 — RFC 850 (example: Friday, 12-Apr-13 15:52:01 UTC)
  • DATE_RFC1036 — RFC 1036 (example: Fri, 12 Apr 13 15:52:01 +0000)
  • DATE_RFC1123 — RFC 1123 (example: Fri, 12 Apr 2013 15:52:01 +0000)
  • DATE_RFC2822 — RFC 2822 (Fri, 12 Apr 2013 15:52:01 +0000)
  • DATE_RFC3339 — Same as DATE_ATOM (since PHP 5.1.3)
  • DATE_RSS — RSS (Fri, 12 Aug 2013 15:52:01 +0000)
  • DATE_W3C — World Wide Web Consortium (example: 2013-04-12T15:52:01+00:00)
timestamp Optional. Specifies an integer Unix timestamp. Default is the current local time (time())

PHP Predefined Date/Time Constants

Constant Description
DATE_ATOM Atom (example: 2019-01-18T14:13:03+00:00)
DATE_COOKIE HTTP Cookies (example: Fri, 18 Jan 2019 14:13:03 UTC)
DATE_ISO8601 ISO-8601 (example: 2019-01-18T14:13:03+0000)
DATE_RFC822 RFC 822 (example: Fri, 18 Jan 2019 14:13:03 +0000)
DATE_RFC850 RFC 850 (example: Friday, 18-Jan-19 14:13:03 UTC)
DATE_RFC1036 RFC 1036 (example: Friday, 18-Jan-19 14:13:03 +0000)
DATE_RFC1123 RFC 1123 (example: Fri, 18 Jan 2019 14:13:03 +0000)
DATE_RFC2822 RFC 2822 (example: Fri, 18 Jan 2019 14:13:03 +0000)
DATE_RFC3339 Same as DATE_ATOM (since PHP 5.1.3)
DATE_RFC3339_EXTENDED RFC3339 Extended format (since PHP 7.0.0) (example:
2019-01-18T16:34:01.000+00:00)
DATE_RSS RSS (Fri, 18 Jan 2019 14:13:03 +0000)
DATE_W3C World Wide Web Consortium (example: 2019-01-18T14:13:03+00:00)
SUNFUNCS_RET_TIMESTAMP Timestamp (since PHP 5.1.2)
SUNFUNCS_RET_STRING Hours:minutes (example: 09:41) (since PHP 5.1.2)
SUNFUNCS_RET_DOUBLE Hours as a floating point number (example: 9.75) (since PHP 5.1.2)

❮ Previous
Next ❯

Объем использованной памяти

Функция возвращает количество памяти в байтах, которое было выделено PHP скрипту на данный момент.

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

$memory = memory_get_usage();
 
// исполняемый код ...
 
echo 'Скушано памяти: ' . (memory_get_usage() - $memory) . ' байт';

В есть функция , которая возвращает тот же результат.

// исполняемый код ...
 
echo 'Скушано памяти: ' . xdebug_memory_usage() . ' байт';

Результат:

Скушано памяти: 36018960 байт

Конвертация результата в килобайты и мегабайты

$memory = memory_get_usage();
 
for ($i = 0; $i < 1000000; $i++) {
 $array[] = rand(0, 1000000);
}
 
$memory = memory_get_usage() - $memory;
// Конвертация результата в килобайты и мегабайты 
$i = 0;
while (floor($memory / 1024) > 0) {
  $i++;
  $memory /= 1024;
}
 
$name = array('байт', 'КБ', 'МБ');
echo 'Скушано памяти: ' . round($memory, 2) . ' ' . $name;

Результат:

Скушано памяти: 34 МБ

Can the robot recognize melodically similar tracks??

Вместо предисловия

Среди задач, с которыми регулярно сталкивается программист, очень часто встречаются разнообразные манипуляции с датами (dates) и временем (time). Никто не будет спорить с тем, что эти значения (символы, параметры) чрезвычайно важны. И база данных, и любая цифровая автоматизированная система не способны корректно работать, если нет точного времени, а также если информация о времени выполнения того либо иного процесса не сохраняется. Вот лишь некоторые примеры использования временных параметров:
— элементарное добавление даты в запись БД;
— отображение времени;
— вывод дат в различном формате;
— проверка текущего времени на соответствие заданному таймеру;
— определение срока между 2-мя датами и так далее.

Чтобы работать со временем было удобно, у каждого языка программирования имеются специальные типы данных, позволяющие хранить соответствующие значения. Обычно речь идёт о числовом значении, как целом, так и с плавающей точкой.

В языке программирования PHP работу со временем символизирует UNIX TIMESTAMP. То есть время тут хранится в виде целого числа, а его исчисление начинается с полуночи 1.01.1970 — с так называемой нулевой даты, принятой в Unix и прочих POSIX-совместимых ОС (ещё эту дату называют «Unix-время»). В результате возвращается число секунд, которое прошло с начала Эпохи Unix.

Прежде чем приступить к дальнейшему изложению материала, следует определить текущее значение времени в формате UNIX TIMESTAMP. Делается это с помощью простейшего кода и функции time:

<?php
echo time();

На момент написания материала было 14 октября 2020 года, поэтому в терминале отобразилось следующее:

1602666005                                                                                                                    

Вы можете проверить вышеописанную команду и получить в PHP текущую дату и время самостоятельно, даже если не являетесь PHP-разработчиком — просто поместите код в любой онлайн-компилятор, вот один из многих. Так же рекомендуется делать и с остальным кодом — это поможет вам лучше понять работу описываемых в статье команд.

Но вернёмся к основной теме разговора. Благодаря коротенькому коду выше, мы получили от сервера текущее время — 1602666005 (у вас значение будет другим, ведь время не стоит на месте))).

Можно согласиться с тем, что для человека такой формат не очень удобен. Но на деле, чем проще представление данных, тем быстрее осуществляется обработка этих данных компьютерным устройством. Да и хранить такие значение в БД в плане ресурсов экономнее, чем при использовании специальных форматов. В итоге PHP работает со значениями времени одинаково на разных платформах (и Unix, и Windows), в результате чего обеспечивается универсальность использования кода.

Если же говорить об удобстве пользователя, то у разработчиков есть масса средств это удобство обеспечить.

Функция date

Эта функция возвратит пользователю строку в форме даты/времени, сделав это в определённом формате. Формат этот определяет сам пользователь.

Синтаксис функции выглядит так:

date($format);

Видно, что формат указывается в качестве аргумента. Этим аргументом могут выступать самые разные символы, коих существует целая таблица:

Теперь давайте попробуем, как эта таблица работает на практике. Выведем текущий день недели:

<?php
echo date("l");

У меня получился Wednesday, а вот что отобразится в консоли у вас, зависит от дня недели, в который вы напишете эту команду.

Теперь выведем дату в виде YYYY-ММ-DD:

<?php
echo date('Y-m-d');

А потом и дату, и время:

<?php
echo date('l jS \of F Y h:i:s A');

Получить простую дату

Обязательный параметр Format функции Date () указывает, как форматировать дату (или время).

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

  • d — Представляет день месяца (от 01 до 31)
  • m — Представляет месяц (от 01 до 12)
  • Y — Представляет год (в четырех цифрах)
  • l (строчная буква ‘ L ‘)-представляет день недели

Другие символы, такие как «/», «.» или «-«, также могут быть вставлены между символами для добавления дополнительного форматирования.

Приведенный ниже пример форматирует сегодняшнюю дату тремя различными способами:

Пример

<?phpecho «Today is » . date(«Y/m/d») . «<br>»;echo «Today is » . date(«Y.m.d») . «<br>»;echo «Today is » . date(«Y-m-d») . «<br>»;
echo «Today is » . date(«l»);?>

Parameter Values

Parameter Description
object Required. Specifies a DateTime object returned by
date_create()
format Required. Specifies the format for the date. The following characters can be used:

  • d — The day of the month (from 01 to 31)
  • D — A textual representation of a day (three letters)
  • j — The day of the month without leading zeros (1 to 31)
  • l (lowercase ‘L’) — A full textual representation of a day
  • N — The ISO-8601 numeric representation of a day (1 for Monday, 7 for Sunday)
  • S — The English ordinal suffix for the day of the month (2 characters st, nd, rd or th. Works well with j)
  • w — A numeric representation of the day (0 for Sunday, 6 for Saturday)
  • z — The day of the year (from 0 through 365)
  • W — The ISO-8601 week number of year (weeks starting on Monday)
  • F — A full textual representation of a month (January through December)
  • m — A numeric representation of a month (from 01 to 12)
  • M — A short textual representation of a month (three letters)
  • n — A numeric representation of a month, without leading zeros (1 to 12)
  • t — The number of days in the given month
  • L — Whether it’s a leap year (1 if it is a leap year, 0 otherwise)
  • o — The ISO-8601 year number
  • Y — A four digit representation of a year
  • y — A two digit representation of a year
  • a — Lowercase am or pm
  • A — Uppercase AM or PM
  • B — Swatch Internet time (000 to 999)
  • g — 12-hour format of an hour (1 to 12)
  • G — 24-hour format of an hour (0 to 23)
  • h — 12-hour format of an hour (01 to 12)
  • H — 24-hour format of an hour (00 to 23)
  • i — Minutes with leading zeros (00 to 59)
  • s — Seconds, with leading zeros (00 to 59)
  • u — Microseconds (added in PHP 5.2.2)
  • e — The timezone identifier (Examples: UTC, GMT, Atlantic/Azores)
  • I (capital i) — Whether the date is in daylights savings time (1 if Daylight Savings Time, 0 otherwise)
  • O — Difference to Greenwich time (GMT) in hours (Example: +0100)
  • P — Difference to Greenwich time (GMT) in hours:minutes (added in PHP 5.1.3)
  • T — Timezone abbreviations (Examples: EST, MDT)
  • Z — Timezone offset in seconds. The offset for timezones west of UTC is negative (-43200 to 50400)
  • c — The ISO-8601 date (e.g. 2013-05-05T16:34:42+00:00)
  • r — The RFC 2822 formatted date (e.g. Fri, 12 Apr 2013 12:01:05 +0200)
  • U — The seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)

and the following predefined constants can also be used (available since PHP 5.1.0):

  • DATE_ATOM — Atom (example: 2013-04-12T15:52:01+00:00)
  • DATE_COOKIE — HTTP Cookies (example: Friday, 12-Apr-13 15:52:01 UTC)
  • DATE_ISO8601 — ISO-8601 (example: 2013-04-12T15:52:01+0000)
  • DATE_RFC822 — RFC 822 (example: Fri, 12 Apr 13 15:52:01 +0000)
  • DATE_RFC850 — RFC 850 (example: Friday, 12-Apr-13 15:52:01 UTC)
  • DATE_RFC1036 — RFC 1036 (example: Fri, 12 Apr 13 15:52:01 +0000)
  • DATE_RFC1123 — RFC 1123 (example: Fri, 12 Apr 2013 15:52:01 +0000)
  • DATE_RFC2822 — RFC 2822 (Fri, 12 Apr 2013 15:52:01 +0000)
  • DATE_RFC3339 — Same as DATE_ATOM (since PHP 5.1.3)
  • DATE_RSS — RSS (Fri, 12 Aug 2013 15:52:01 +0000)
  • DATE_W3C — World Wide Web Consortium (example: 2013-04-12T15:52:01+00:00)

Деревянные

Модели идеально вписываются в дачный антураж. Все похвалы дереву как материалу относятся и к ним: экологичные, «теплые», гипоаллергенные, износостойкие, вкусно пахнут лесом.

Минусы вытекают из достоинств: горки из дерева рассыхаются, трескаются. Они боятся влаги. А если плохо обработаны, могут занозить пальчик.

Runtime Configuration

The behavior of these functions is affected by settings in php.ini:

Name Description Default PHP Version
date.timezone The default timezone (used by all date/time functions) «» PHP 5.1
date.default_latitude The default latitude (used by date_sunrise() and date_sunset())  «31.7667» PHP 5.0
date.default_longitude The default longitude (used by date_sunrise() and date_sunset()) «35.2333» PHP 5.0
date.sunrise_zenith The default sunrise zenith (used by date_sunrise() and date_sunset()) «90.83» PHP 5.0
date.sunset_zenith The default sunset zenith (used by date_sunrise() and date_sunset()) «90.83» PHP 5.0

Описание time и mktime

Уже упоминалось, что time возвратит количество секунд с начала т. н. эпохи Unix и вплоть до текущего времени. Однако на практике эта функция чаще используется не в «чистом виде», а вместе с иными функциями.

Для начала займёмся её использованием вместе с меткой текущей даты:

<?php
$now = time(); // метка 
echo $now;  

$nextWeek = time() + (7 * 24 * 60 * 60); // 7 дней; 24 ч.; 60 мин.; 60 сек.
echo $nextWeek; // будет выведено что-то вроде 16026782231603283023

А теперь используем её же, но уже совместно с date(). Давайте выведем текущую дату двумя способами, а потом выведем дату, которая наступит через неделю:

<?php
    $now = time();
$nextWeek = time() + (7 * 24 * 60 * 60);

// Первый способ вывода даты                   
echo 'Сегодня: '. date('Y-m-d') ."\n";

// Второй способ вывода                    
echo 'Сегодня: '. date('Y-m-d', $now) ."\n";

// Дата через неделю
echo 'Через неделю будет: '. date('Y-m-d', $nextWeek) ."\n";

Теперь стоит поговорить о том, каким образом с функцией time используется mktime. Именно mktime возвращает метки времени Unix для даты, которую укажет пользователь.

Аргументы могут быть разные, а также опущены справа налево:

Лучше всего рассмотреть вышеописанное на примере. Давайте выведем в терминал:
— текущую полную дату и время (часы, минуты, секунды);
— время и дату завтрашнего дня;
— время и дату следующего месяца того же дня;
— ту же дату, но уже прошедшего года.

<?php
// выводим текущую дату и время
echo date("r"); 

// создание метки для завтрашнего дня
$tomorrow = mktime(,,,date("m"),date("d")+1, date("Y"));
echo date("r", $tomorrow); 

// создание метки для следующего месяца
$nextmonth = mktime(,,,date("m")+1,date("d"), date("Y"));
echo date("r", $nextmonth ); 

// метка для прошлого года
$lastyear= mktime(,,,date("m")+1,date("d"), date("Y")-1);
echo date("r", $lastyear); 

На этом всё

Если интересуют более сложные и продвинутые знания по PHP, обратите внимание на соответствующий курс в OTUS!

По материалам статей:
— https://labs-org.ru/php-6/;
— https://space-base.ru/library/php/rabota-s-datoj-i-vremenem-v-php.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector