Содержание

PHP: Функции даты и времени

I do not have much programming in php and I hope I can help those that I want to do is that when entering in the form the date 1 and the date2 I calculate if between those two dates if they have passed 5 or more years and I add 3 more days taking As reference date 2, I do not know if I understand.

To see a theoretical example date = 10/01/2012 date2 = 23/07/2017

Between these two dates have passed 5 years, 6 months, and 13 days elapsed

Knowing this my serious conditional

If they are equal or more than 5 years but less than 10 years will be added 3 days
If they are equal or more than 10 years but less than 15 years will be added 6 days
If they are equal or more than 15 years but less than 20 years will be added 9 days
If they are equal to or more than 20 years will be added 12 days

Then having the conditionals

For this example would be case as it is greater than 5 years the result that I should show taking in days like date of departure the date2 = 23/07/2017 and to this date it is added 30 days that would be a constant and depending on the years like Is the example happens 5 years would be: date2 = 23/07/2017 + 30 days = 08/30/2017 + 3 days

= End date to show = result = 02/09/2017.

But I still think how to do it if you can guide me I would appreciate a world, and everything should show without pressing buttons, if I press a button would be like to store in the database only the results otenidos as date1 date2 and result

<? Php
    
// $ date1 = $ _ POST [«date1»]; // this will be the first date or date of entry
// $ date2 = $ _ POST [«date2»]; // this will be the date with which you will calculate

    
// $ difference = $ date2 — $ date1;

// if ($ difference <= 5)
{
    // echo «number of days that correspond to it [«. $ Date2 + 30 + 3. «].»;

//} else {

// ($ difference <= 5)

{
// echo «number of days corresponding to it [» $ date2 + 30 «].»;

}

PHP: date — Manual

День
dДень месяца, 2 цифры с ведущим нулёмот 01 до 31
DТекстовое представление дня недели, 3 символаот Mon до Sun
jДень месяца без ведущего нуляот 1 до 31
l (строчная ‘L’)Полное наименование дня неделиот Sunday до Saturday
NПорядковый номер дня недели в соответствии со стандартом ISO-8601 (добавлен в версии PHP 5. 1.0)от 1 (понедельник) до 7 (воскресенье)
SАнглийский суффикс порядкового числительного дня месяца, 2 символа st, nd, rd или th. Применяется совместно с j
wПорядковый номер дня неделиот 0 (воскресенье) до 6 (суббота)
zПорядковый номер дня в году (начиная с 0)От 0 до 365
Неделя
W
Порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельникаНапример: 42 (42-я неделя года)
Месяц
FПолное наименование месяца, например January или Marchот January до December
mПорядковый номер месяца с ведущим нулёмот 01 до 12
MСокращенное наименование месяца, 3 символаот
Jan
до Dec
nПорядковый номер месяца без ведущего нуляот 1 до 12
tКоличество дней в указанном месяцеот 28 до 31
Год
LПризнак високосного года1, если год високосный, иначе 0.
oНомер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и
Y
, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0)
Примеры: 1999 или 2003
YПорядковый номер года, 4 цифрыПримеры: 1999, 2003
yНомер года, 2 цифрыПримеры: 99, 03
Время
aAnte meridiem (англ. «до полудня») или Post meridiem (англ. «после полудня») в нижнем регистреam или pm
AAnte meridiem или Post meridiem в верхнем регистреAM или PM
BВремя в формате Интернет-времени (альтернативной системы отсчета времени суток)от 000 до 999
gЧасы в 12-часовом формате без ведущего нуля
от 1 до 12
GЧасы в 24-часовом формате без ведущего нуляот 0 до 23
hЧасы в 12-часовом формате с ведущим нулёмот 01 до 12
HЧасы в 24-часовом формате с ведущим нулёмот 00 до 23
iМинуты с ведущим нулёмот 00 до 59
sСекунды с ведущим нулём
от 00 до 59
u Микросекунды (добавлено в версии PHP 5. 2.2). Учтите, что date() всегда будет возвращать 000000, т.к. она принимает целочисленный параметр, тогда как DateTime::format() поддерживает микросекунды, если DateTime создан с ними.Например: 654321
v Миллисекунды (добавлено в PHP 7.0.0). То же замечание справедливо и для
u
.
Пример: 654
Временная зона
eКод шкалы временной зоны (добавлен в версии PHP 5.1.0)Примеры: UTC, GMT, Atlantic/Azores
I (заглавная i)Признак летнего времени1, если дата соответствует летнему времени, 0 в противном случае.
OРазница с временем по Гринвичу, в часахНапример: +0200
PРазница с временем по Гринвичу с двоеточием между часами и минутами (добавлено в версии PHP 5.1.3)Например: +02:00
TАббревиатура временной зоныПримеры: EST, MDT
ZСмещение временной зоны в секундах. Для временных зон, расположенных западнее UTC возвращаются отрицательные числа, а расположенных восточнее UTC — положительные.
от -43200 до 50400
Полная дата/время
cДата в формате стандарта ISO 8601 (добавлено в PHP 5)2004-02-12T15:19:21+00:00
rДата в формате » RFC 2822Например: Thu, 21 Dec 2000 16:01:07 +0200
UКоличество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT)Смотрите также time()

Работа с датами и временем в PHP и MySQL

При работе с любым языком программирования, задачи, касающиеся даты и времени, часто является тривиальными и простыми. И PHP, к счастью, имеет один из самых мощных инструментов по работе с датой/временем, который поможет вам легко справиться со всеми видами задач связанных с временем: работа с Unix timestamp, форматирование дат для лучшего восприятия их человеком, работа с часовыми поясами, подсчет количества дней между сегодняшним днем ​​и, например, вторым вторником в следующем месяце, и т.д. В этой статье вы ознакомитесь с основными временными функциями PHP (time(), mktime() и date()) и их объектно-ориентированными «коллегами», а затем познакомитесь с MySQL-датами, и мы покажем вам, как подружить их с PHP.

PHP-функции даты и времени


Большая часть этой статьи будет посвящена работе с Unix-временем или POSIX. Время здесь представлено в виде количества секунд, прошедших с полуночи 1 января 1970 года, UTC. Если вы заинтересованы в полной истории времени Unix, то ознакомьтесь со статьей Unix time в Википедии.

UTC, известное также под именем Coordinated Universal Time, также известное как GMT, а иногда и Zulu time, это время нулевого градуса долготы.    Все остальные часовые пояса в мире являются положительным или отрицательным смещением относительно этого времени. UTC и Unix время сделает вашу жизнь проще, когда вам придется иметь дело с часовыми поясами. Я расскажу об этом чуть позже, а пока рассмотрим некоторые функции для работы со временем.

Получение текущего времени Unix

Функция time() без аргументов возвращает количество секунд, прошедших с начала эпохи Unix. Чтобы проиллюстрировать это я буду использовать интерактивную консоль PHP.

sean@beerhaus:~$ php -a
php > print time();
1324402770

Если вам нужен массив для работы с Unix-временем, используйте функцию getdate(). Она принимает необязательный аргумент Unix timestamp, если его нет, то по умолчанию это значение функции time().

php > $unixTime = time();
php > print_r(getdate($unixTime));
Array
(
 [seconds] => 48
 [minutes] => 54
 [hours] => 12
 [mday] => 20
 [wday] => 2
 [mon] => 12
 [year] => 2011
 [yday] => 353
 [weekday] => Tuesday
 [month] => December
 [0] => 1324403688
)

Форматирование времени Unix


Unix-время может быть легко отформатировано в почти любую строку, чтобы человек мог его прочитать. Функция date() используется для форматирования Unix timestamp в понятную для человека строку и принимает аргументы форматирования и необязательный аргумент «время». Если необязательный аргумент «время» не указан, используется значение функции time(), т.е. текущее время.

php > print date(«r», $unixTime);
Tue, 20 Dec 2011 12:54:48 -0500

Аргумент «r» при форматировании строки возвращает время в формате RFC 2822. Конечно, Вы можете использовать другие спецификаторы, чтобы определить свои собственные форматы.

php > print date(«m/d/y h:i:s a», $unixTime);
12/20/11 12:54:48 pm
php > print date(«m/d/y h:i:s a»);
12/20/11 01:12:11 pm
php > print date(«jS \of F Y», $unixTime);
20th of December 2011

Полный список допустимых значений для форматирования, смотрите на странице функции date() в документации по PHP. Функция становится еще более полезной, когда используется в сочетании с функциями mktime() и strtotime(), это вы увидите в дальнейших примерах.

Создание Unix-времени от заданного времени

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

mktime(часы, минуты, секунды, месяц, день, год, isDST)

Вы можете установить isDST равный 1, если используется летнее время, в противном случае 0, или -1, если это неизвестно (значение по умолчанию).

php > print date(«r», mktime(12, 0, 0, 1, 20, 1987));
Tue, 20 Jan 1987 12:00:00 -0500
php > print date(«r», mktime(0, 0, 0, date(«n»), date(«j»), date(«Y»)));
Tue, 20 Dec 2011 00:00:00 -0500
php > print date(«r», mktime(23, 59, 59, date(«n»), date(«j»), date(«Y»)));
Tue, 20 Dec 2011 23:59:59 -0500

Вы можете видеть, что mktime() может быть очень полезна при работе с запросами к базе данных, которые используют диапазоны дат определенные пользователем. Например, если вы храните timestamp в виде целых чисел (Unix время) в MySQL, очень легко настроить общий временной диапазон для запроса.

<?php
$startTime = mktime(0, 0, 0, 1, 1, date(«y»));
$endTime  &amp;nbsp;= mktime(0, 0, 0, date(«m»), date(«d»), date(«y»)); ?>

Преобразование английских дат в Unix время

Почти магическая функция strtotime() принимает строку даты/времени в качестве первого аргумента, и Unix timestamp, чтобы использовать в качестве основы для преобразования. Смотрите документацию для получения информации о допустимых форматах даты.

php > print strtotime(«now»);
1324407707
php > print date(«r», strtotime(«now»));
Tue, 20 Dec 2011 14:01:51 -0500
php > print strtotime(«+1 week»);
1325012569
php > print date(«r», strtotime(«+1 week»));
Tue, 27 Dec 2011 14:03:03 -0500
php > print date(«r», strtotime(«next month»));
Fri, 20 Jan 2012 14:04:20 -0500
php > print date(«r», strtotime(«next month», mktime(0, 0, 0)));
Fri, 20 Jan 2012 00:00:00 -0500
php > print date(«r», strtotime(«next month», mktime(0, 0, 0, 1, 31)));
Thu, 03 Mar 2011 00:00:00 -0500

Объекты DateTime и DateTimeZone


Объект PHP DateTime является объектно-ориентированным подходом к работе с датами и часовыми поясами. Конструктор принимает строковое представление времени, очень похоже на функцию strtotime(), о которой говорилось выше. Значение по умолчанию, если аргумент не указан, «now» (сейчас).

php > $dt = new DateTime(«now»);
php > print $dt->format(«r»);
Tue, 20 Dec 2011 16:28:32 -0500
php > $dt = new DateTime(«December 31 1999 12:12:12 EST»);
php > print $dt->format(«r»);
Fri, 31 Dec 1999 12:12:12 -0500

Метод format() объекта DateTime работает так же, как функция date(), и принимает все те же символы форматирования. Объект DateTime также имеет несколько полезных констант, которые могут быть переданы в метод format().

php > print $dt->format(DATE_ATOM);
2011-12-20T15:57:45-05:00
php > print $dt->format(DATE_ISO8601);
2011-12-20T15:57:45-0500
php > print $dt->format(DATE_RFC822);
Tue, 20 Dec 11 15:57:45 -0500
php > print $dt->format(DATE_RSS);
Tue, 20 Dec 2011 15:57:45 -0500

Полный список констант можно найти на странице документации DateTime.

Поскольку мы будем работать с часовыми поясами, давайте установим часовой пояс по умолчанию. В файле конфигурации php.ini (у меня есть один для CLI и один для Apache) найдите раздел, который выглядит следующим образом:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
; date.timezone =

Если значение не указано для date.timezone, PHP будет пытаться сделать все возможное, чтобы определить часовой пояс системы которая установлена на вашем сервере. Вы можете проверить, какое значения использует PHP при помощи функции date_default_timezone_get().

Давайте установим временную зону сервера на время UTC (date.timezone = UTC) и сохраним файл конфигурации. Вы должны перезагрузить Apache или CLI, чтобы увидеть изменения.

Объект DateTime включает в себя внутренний экземпляр класса DateTimeZone для отслеживания часовых поясов. Когда вы создаете новый экземпляр DateTime, DateTimeZone должен быть установлен по умолчанию как указано в php. ini.

php > $dt = new DateTime();
php > print $dt->getTimeZone()->getName();
UTC

Полный список допустимых имен часовых поясов можете найти на соответствующей странице документации.

Теперь вы можете увидеть разницу во времени, между двумя объектами DateTime, созданных для разных часовых поясов. Например, вот пример, который преобразует время из UTC в America/New_York(EST).

php > $dt = new DateTime();
php > print $dt->format(«r»);
Tue, 20 Dec 2011 20:57:45 +0000
php > $tz = new DateTimeZone(«America/New_York»);
php > $dt->setTimezone($tz);
php > print $dt->gt;format(«r»);
Tue, 20 Dec 2011 15:57:45 -0500

Обратите внимание на смещение -0500 в декабре месяце. Если вы измените значение времени на летний день, например, 1 июля, то увидите, что он «знает» летнее время (EDT).

php > $tz = new DateTimeZone(«America/New_York»);
php > $july = new DateTime(«7/1/2011»);
php > $july->setTimezone($tz);
php > print $july->>format(«r»);
Thu, 30 Jun 2011 20:00:00 -0400

Использование даты в MySQL и PHP


Если вы использовали MySQL на любом уровне, вы, вероятно, обратили внимание на тип данных DATETIME. Он выглядит как дата, и если бы вы сказали, что это дата, то вы были бы правы. Но поскольку вы выбираете его из MySQL, в PHP эта дата уже представляет собой строку, которая выглядит как дата.

* Да, я знаю, что MySQL имеет множество функций форматирования даты. Почему же мы хотим отформатировать дату прямо из базы данных в таком случае? У нас может быть несколько различных преобразований и форматов, которые мы хотим применить. И лучше всего форматировать дату только тогда, когда человек собирается её увидеть.

<?php
$db = new PDO(«mysql:host=localhost;dbname=testdb», «dbuser», «dbpassword»);

$result = $db->query(«SELECT dt_date FROM some_table»);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
 print_r($row);
 var_dump($row[«dt_date»]);
}
$result->closeCursor();

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

Array
(
 [dt_date] => 2012-01-16 13:03:49
)
string(19) «2012-01-16 13:03:49»

Значение DATETIME — это время локального сервера MySQL в любом часовом поясе. Если все, что вы делаете, касается только одного сервера в одном часовом поясе, DATETIME, вероятно, подходит для большинства ваших потребностей, и я очень завидую вам.

Итак, как вам справляться с датами и часовыми поясами в PHP и MySQL? Сохранять даты как Unix timestamps.

Вы уже знаете, что время Unix — это количество секунд, прошедших с 1 января 1970 года в UTC, так что это дает вам постоянный часовой пояс для работы, и, надеюсь, вы заметили, что многие PHP функции даты/времени основываются на Unix timestamps.

При работе с MySQL, я обычно создаю столбец таблицы, который будет хранить даты как INTEGER UNSIGNED. При вставке даты можно использовать функции time() из PHP или UNIX_TIMESTAMP() из MySQL.

mysql> SELECT UNIX_TIMESTAMP();
+——————+
| UNIX_TIMESTAMP() |
+——————+
|       1326738918 |
+——————+

Если вы хотите использовать MySQL для форматирования даты, то вы можете. Но время будет соответствовать часовому поясу сервера и я советую вам воздержаться от любого типа форматирования, то тех пока вы не находитесь в шаблоне/на уровне представления в вашем веб-приложении и готовы, чтобы человеческий глаз увидел это.

mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
+———————————+
| FROM_UNIXTIME(UNIX_TIMESTAMP()) |
+———————————+
| 2012-01-16 13:37:16             |
+———————————+

В любом приложении, как правило, есть таблица, которая отслеживает пользователей, пользовательские настройки часового пояса, которые затем будут считаны в значение $_SESSION. Если у вас есть запись в сессии, вроде этой:

$_SESSION[«userTZ»] => «America/Chicago»

Вы можете легко конвертировать сохраненный Unix timestamp (UTC) в любую дату в часовом поясе конкретного пользователя.

<?php
$result = $db->query(«SELECT int_date FROM some_table»);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
 $dt = new DateTime();
 $tz = new DateTimeZone($_SESSION[«userTZ»]);
 $dt->setTimestamp($row[«int_date»]);
 $dt->setTimezone($tz);
 print $dt->format(«r»);
}

Это вернет дату «Mon, 16 Jan 2012 12:03:49 -0600». Где -0600 говорит нам, что это 6 часов от временной зоны UTC, которая имеет смещение 0.

Если бы мы изменили часовой пояс на America/Los_Angeles, то в результате дата выглядела бы так:

Mon, 16 Jan 2012 10:03:49 -0800

А America/New_York вернет:

Mon, 16 Jan 2012 13:03:49 -0500

Заключение


Работа с датами и временными зонами является ​​частью задач многих программистов, но вам не о чем беспокоиться, если у вас есть PHP, надежный и простой в использовании инструмент для работы с датами.

Вы видели, как легко получить метку времени, как отформатировать дату в любой формат, как преобразовать английское представление даты в метку времени (timestamp) и как преобразовывать время между часовыми поясами. Если выделить две основных темы из статьи, то это: 1) Unix время и 2) UTC, как основная временная зона для всех дат при работе с PHP и MySQL.

Идея отсчитывать всё время по UTC относится не только к PHP и MySQL, это считается хорошей практикой в любом языке.

Перевод статьи с phpmaster.com


Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом

Уроки PHP – получение и вывод даты и времени

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

 

 

Основные моменты для дат и времени в PHP

Функции, которые обрабатывают дату и время в PHP, позволяют получать дату и время с того сервера, на котором выполняется скрипт. Также они позволяют манипулировать, редактировать, форматировать эти значения перед их отображением на экран (выводом). Сегодня мы рассмотрим самые важные функции для работы с датой и временем.

 

 

Функция PHP date()

Наиболее используемая функция для обработки даты и времени – это функция date(). Эта функция возвращает фактическую (системную) дату и время в указанном вами формате. Также функция может конвертировать формат отметки времени (временная метка, метка времени или timestamp) в удобочитаемый формат. Полный синтаксис функции следующий:

date ( string $format [, int $timestamp = time() ] )

 

Функция возвращает строку, которая отформатирована в соответствии с указанным шаблоном (format). Аргумент timestamp задает метку времени; если timestamp не задан, тогда используется текущее системное время. Указывать временную метку необязательно, если вы ее не укажете, тогда она по умолчанию будет равна значению, которое возвращается функцией time().

 

 

Ниже представлены практические примеры получения фактической информации о дате и времени:

<?php
echo "<p>Отображение текущей даты: " . date('d-m-Y') . "</p>";
echo "<p>Отображение текущего времени: " . date('H:i:s') . "</p>";
echo "<p>Отображение текущей даты и времени: " .  date('d-m-Y H:i:s') . "</p>";
echo "<p>Отображение текущей даты и времени в длинном формате: " . date('d F Y, D - g:i:s A') . "</p>";
?>

 

 

В данных примерах используются разные шаблоны формата даты и времени. Ниже представлена таблица с расшифровкой некоторых символов в строке format.

Символ в строке formatОписаниеПример возвращаемого значения
День
dДень месяца с 2-мя цифрамиот 01 до 31
DДень недели в текстовом формате, 3 символаот Mon до Sun
zПорядковый номер дня в году (начиная с 0)От 0 до 365
Месяц
FПолное название месяца, например, January или Marchот January до December
mПорядковый номер месяца, 2 цифрыот 01 до 12
MСокращенное название месяца, 3 символаот Jan до Dec
Год
YПорядковый номер года, 4 цифрыПримеры: 1999, 2019
yПорядковый номер года, 2 цифрыПримеры: 99, 19
Время
aAnte meridiem (лат. «до полудня») или Post meridiem (лат. «после полудня») в нижнем регистреam или pm
AAnte meridiem или Post meridiem в верхнем регистреAM или PM
gЧасы в 12-часовом форматеот 1 до 12
GЧасы в 24-часовом форматеот 0 до 23
hЧасы в 12-часовом форматеот 01 до 12
HЧасы в 24-часовом формате, 2 цифрыот 00 до 23
iМинуты, 2 цифрыот 00 до 59
sСекунды, 2 цифрыот 00 до 59

 

 

 

Функция PHP mktime()

Иногда вам нужно получить метку времени в прошлом или будущем. Вы можете сделать это с помощью функции mktime(). Вам нужно указать нужную дату, и она возвращается с меткой времени Unix. Синтаксис данной функции следующий:

int mktime ( [int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year]]]]]] )

 

Здесь используются следующие данные:

  • hour – Количество часов, прошедших с начала дня, указанного параметрами month, day и year.
  • minute – Количество минут, прошедших от начала часа, указанного параметром hour.
  • second – Количество секунд, прошедших от начала минуты, указанной параметром minute.
  • month – Количество месяцев, прошедших с конца предыдущего года.
  • day – Количество дней, прошедших с конца предыдущего месяца.
  • year – Номер года, может быть указан двумя или четырьмя цифрами.

 

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

<?php
echo "<p>Отображение даты, сгенерированной функцией mktime: " . date('d-m-Y', mktime(0, 0, 0, 5, 25, 2019)) . "</p>";
echo "<p>Отображение даты, сгенерированной функцией mktime с неверным указанием дня и месяца: " . date('d-m-Y', mktime(0, 0, 0, 14, 32, 2019)) . "</p>";
?>

 

 

Если вы хотите получить дату завтрашнего дня, вы можете использовать следующий код:

<?php
echo "<p>Сегодняшняя дата: " . date('d-m-Y') . "</p>";
echo "<p>Завтра будет: " . date('d-m-Y', mktime(0, 0, 0, date('m'), date('d')+1, date('Y') ) ) . "</p>";
?>

 

В данном примере мы использовали функцию mktime() и добавили 1 день к параметру дня, чтобы получить дату завтрашнего дня.

 

 



 

Задачи по PHP.

Работа с датой и временем

Работа с датой и временем в PHP

перейти к содержанию задачника

Во всех задачах по умолчанию использовать Carbon или DateTime

  1. Дано количество секунд. Определить, сколько это дней, часов, минут.
  2. Создать carbon-объект для ‘22.10.2017’. Показать на экран в формате ‘d-m-Y’. Увеличить дату на 10 дней. Изменить время на 10 часов 30 мин 15 сек. Показать дату на экран в формате ‘d/m/Y H:i:s’. 
  3. Дано две даты. Вывести ту, которая раньше, в формате ‘день-месяц (год)’
  4. Вывести, сколько дней в текущем месяце.
  5. Дан номер месяца текущего года. Вывести все его даты.
  6. Дана дата. Вывести, сколько дней до нее осталось (или сколько дней прошло). 
  7. Вывести все прошедшие понедельники текущего года.
  8. Дана дата. Сгенерировать расписание с этой даты на 30 дней по такому принципу: сутки через трое. Если рабочий день приходится на воскресенье, то он переносится на понедельник.  В итоге показать даты рабочих дней.  
  9. Помогите репетитору по английскому. Урок длится 45 минут, перерыв между уроками 10 мин. Репетитор говорит время начала работы и время окончания работы (в рамках одного дня). Сгенерируйте расписание уроков. Например, 10:00 — начало, 18:00 — окончание. Расписание: 10:00 — 10:45, 10:55 — 11:40 и т.д. Если урок обрывается временем окончания работы, то не добавлять его в расписание.
  10. Дан режим работы интернет-магазина. ПН 9:00 – 21:00 ВТ 9:00 – 21:00 СР 9:00 – 21:00 ЧТ 9:00 – 21:00 ПТ 9:00 – 21:00 СБ 10:00 – 18:00 ВС 10:00 – 18:00. И даны дата и время. Определить, работает ли в это время магазин и сколько минут до конца рабочей смены.
  11. Дан массив периодов дат (временные затраты сотрудника на выполнение задач менеджера). Например, $dates = [[‘start’=>’02.10.2017 10:12:11’, ‘end’=>’02.10.2017 15:20:11], [‘start’=>’03.10.2017 13:12:11’, ‘end’=>’03.10.2017 16:40:40]]; То есть это многомерный массив, каждый элемент — массив с двумя датами в формате ‘d.m.Y H:i:s’. Найти, сколько всего часов потрачено сотрудником (в формате N час K мин).
  12. Дан массив дат бронирования номера в отеле. Элемент массива или одна дата, или период — две даты через дефис. Пример: $dates = [‘12.09.2017’, ‘14.09.2017-02.10.2017’]; Выяснить можно ли добавить в массив данную дату или период для нового бронирования. Например, для указанного выше примера период ‘01.10.2017-05.10.2017’ добавлять нельзя, так как первые два дня уже забронированы.

перейти к содержанию задачника

 

Метки PHP, задачи. Смотреть запись.

waDatetime — Документация Webasyst

Методы

  • date

    Возвращает строковое представление даты в соответствии с указанным форматом.

  • format

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

  • getDefaultTimeZone

    Возвращает используемую по умолчанию временную зону с помощью PHP-функции date_default_timezone_get.

  • getFormat

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

  • getFormatJS

    Возвращает стандартное представление форматов даты/времени для использования в JavaScript-коде, соответствующих форматам, использующимся во фреймворке.

  • getTimeZones

    Возвращает список доступных временных зон с локализованными наименованиями.

  • parse

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

public static function

date ($format, $time = null, $timezone = null, $locale = null)

Возвращает строковое представление даты в соответствии с указанным форматом.

Параметры
  • $format

    Формат представления даты. Допускается использовать символы формата, предусмотренные для PHP-функции date. Для отображения наименования месяца в нижнем регистре необходимо использовать символ f.

  • $time

    Метка времени. Если не указано, используется текущая метка времени.

  • $timezone

    Строковый идентификатор временной зоны. Если не указано, используется автоматическое определение временной зоны.

  • $locale

    Строковый идентификатор локали. Если не указано, используется автоматическое определение локали.

Пример
waDateTime::date('j f Y года', '06-11-2013')
Результат
6 ноября 2013 года

public static function

format ($format, $time = null, $timezone = null, $locale = null)

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

Параметры
  • $format

    Формат представления даты/времени. Допускается использовать следующие обозначения формата:

    • humandatetime: подставляет слова «вчера», «сегодня», «завтра» вместо соответствующих дат относительно текущей даты пользователя
    • humandate: возвращает дату в формате d f Y, предназначенном для метода date (перечисленные далее форматы предназначены для использования этим же методом)
    • date: возвращает дату в формате Y-m-d
    • time: возвращает дату в формате H:i
    • fulltime: возвращает дату в формате H:i:s
    • datetime: возвращает дату в формате Y-m-d H:i
    • fulldatetime: возвращает дату в формате Y-m-d H:i:s
    • timestamp: возвращает дату в формате U
  • $time

    Метка времени. Если не указано, используется текущая метка времени.

  • $timezone

    Строковый идентификатор временной зоны. Если не указано, используется автоматическое определение временной зоны.

  • $locale

    Строковый идентификатор локали. Если не указано, используется автоматическое определение локали.

Пример
waDateTime::format('humandatetime')
Результат
Сегодня 17:11

public static function

getDefaultTimeZone()

Возвращает временную зону, используемую по умолчанию, с помощью PHP-функции date_default_timezone_get.

Пример
waDateTime::getDefaultTimeZone()
Результат
Europe/Moscow

public static function

getFormat ($format, $locale = null)

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

Параметры
  • $format

    Строковый идентификатор формата отображения времени, использующегося во фреймворке. Допускается использовать ключи подмассива date_formats, содержащегося в конфигурационном файле локали в директории wa-system/locale/data/, константы PHP-класса DateTime, строки формата, допустимые для PHP-функции date, либо один из идентификаторов, соответствующих предопределенным строкам формата отображения времени, описанным для метода format.

  • $locale

    Строковый идентификатор локали. Если не указано, используется автоматическое определение локали.

Пример
waDateTime::getFormat ('humandate', 'en_US')
Результат
F j, Y

public static function

getFormatJS ($format, $locale = null)

Возвращает стандартное представление форматов даты/времени для использования в JavaScript-коде, соответствующих форматам, использующимся во фреймворке.

Параметры
  • $format

    Строковый идентификатор формата, описанный для параметра $format метода getFormat.

  • $locale

    Строковый идентификатор локали. Если не указано, используется автоматическое определение локали.

Пример
waDateTime::getFormatJS ('humandate', 'en_US')
Результат
MM d, yy

public static function

getTimeZones()

Возвращает список доступных временных зон с локализованными наименованиями.

Пример
waDateTime::getTimeZones()
Результат
Array
(
    [Pacific/Apia] => −11 Апия, Миндуэй, Ниуэ, Паго-Паго
    [Pacific/Fakaofo] => −10 Факаофо, Гонолулу, Джонсон, Раротонга, Таити
    [America/Adak] => −09 Адак
    [Pacific/Gambier] => −09 Остров Гамбье, Маркизы
    [America/Anchorage] => −08 Анкоридж, Джуно, Ном, Sitka, Якутат
    [Pacific/Pitcairn] => −08 Питкэрн
    . ..
    [Asia/Anadyr] => +12 Анадырь, Камчатка, Магадан
    [Pacific/Auckland] => +12 Окленд, Чатэм, Фиджи, Фунафути, Кваджалейн
    [Pacific/Majuro] => +12 Маджуро, Науру, Тарава, Уэйк, Уоллис
    [Pacific/Enderbury] => +13 Эндербери, Тонгатапу
    [Pacific/Kiritimati] => +14 Киритимати
)

public static function

parse ($format, $string, $timezone = null, $locale = null)

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

Параметры
  • $format

    Строковый идентификатор формата, описанный для метода format, кроме humandatetime.

  • $string

    Строковое представление времени, отформатированное в соответствии со строкой формата, указанной в параметре $format.

  • $timezone

    Строковый идентификатор временной зоны. Если не указано, используется автоматическое определение временной зоны.

  • $locale

    Строковый идентификатор локали. Если не указано, используется автоматическое определение локали.

Пример
waDateTime::parse ('humandate', 'November 8, 2013', null, 'en_US')
Результат
2013-11-08

Календарь | htmlbook.ru

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

<input type="date" атрибуты>

На сервер данные передаются в формате ГГГГ-ММ-ДД, например, 22.12.2014, а вид календаря может различаться в зависимости от браузера. Полностью поддерживает календарь пока только Opera, выводя виджет для выбора любой даты (рис. 1).

Рис. 1. Календарь в браузере Opera

Браузер Chrome также поддерживает календарь, но делает это весьма скупо (рис. 2). По сути вы только можете прокручивать дату или вводить её как текст.

Рис. 2. Календарь в Chrome

В примере 1 показано создание календаря для выбора произвольной даты.

Пример 1. Календарь

HTML5IECrOpSaFx

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Календарь</title>
 </head>
 <body>
  <form>
   <p>Выберите дату: <input type="date" name="calendar">
   <input type="submit" value="Отправить"></p>
  </form>
 </body>
</html>

Допустимо ограничить ввод даты заданным значением через атрибуты min и max, они соответственно указывают нижнюю и верхнюю дату. Так, если вам требуется сузить диапазон ввода до ±3 дней от даты 01.06.2012, то код запишется, как показано в примере 2.

Пример 2. Ограничение даты

HTML5IECrOpSaFx

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Календарь</title>
 </head>
 <body>
  <form>
   <p>Выберите дату: 
   <input type="date" name="calendar" value="2012-06-01"
    max="2012-06-04" min="2012-05-29">
   <input type="submit" value="Отправить"></p>
  </form>
 </body>
</html>

Текущая дата заданная через атрибут value подсвечивается фоном, неактивные дни, которые нельзя выбрать — серым цветом (рис. 3).

Рис. 3. Календарь с диапазоном ввода

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

<input type="month">
<input type="week">

Выбор месяца в Opera происходит через аналогичный виджет, но в этом случае нельзя указать конкретную дату (рис.  4).

Рис. 4. Выбор месяца в Opera

На сервер данные поля type=»month» пересылаются как ГГГГ-ММ, например, 2014-10.

Похожим образом выглядит и виджет для выбора недели (рис. 5), но дополнительно выводится номер недели и выбрать можно только её. На сервер при этом значение отправляется как 2014-W38, где вначале указывается год, затем через дефис W и после него номер недели от начала года.

Рис. 5. Выбор недели в Opera

В примере 3 показано создание поля для ввода месяца.

Пример 3. Выбор месяца

HTML5IECrOpSaFx

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Календарь</title>
 </head>
 <body>
  <form>
   <p>Укажите месяц: 
   <input type="month" name="month">
   <input type="submit" value="Отправить"></p>
  </form>
 </body>
</html>

Использование даты и времени в PHP — Совет по Linux

На веб-сайте часто требуются различные типы операций, связанных с датой и временем. Значение отметки времени UNIX используется для хранения даты и времени на компьютере. Значение отметки времени вычисляется путем подсчета количества секунд, прошедших с даты и времени 1 января 1970 г., 00:00:00 по Гринвичу. Но значение метки времени не читается человеком. PHP имеет множество встроенных функций, связанных с датой и временем, для чтения значений даты и времени из значения отметки времени.В этом руководстве показано, как работать со значениями даты и времени в PHP.

Использование функции PHP date ()

Одной из наиболее часто используемых функций PHP для выполнения задач, связанных с датой и временем, является date () . Синтаксис этой функции приведен ниже.

Синтаксис:
дата (строка $ format [, int $ timestamp = time ()]): строка

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

Символов формата:

В функции date () для форматирования даты и времени используются символы разных форматов. Ниже приведены некоторые часто используемые символы формата с пояснениями.

Используется для Знак Назначение Пример
Дата


D Отображение дня недели в краткой форме. с понедельника по вс
г Показывает день месяца с нулем в начале. 01 до 31
M Отобразить название месяца в краткой форме. с января по декабрь
м Отображение месяца в виде числа с нулем в начале. 01 по 12
Y Отображение года из четырех цифр. 2020
y Отображение года двумя цифрами. 20
Ф Показать название месяца в полной форме. с января по декабрь
л Показать название дня недели в полной форме. с понедельника по воскресенье
n Отображение месяца в виде числа без нуля в начале. от 1 до 12
j Показывает день месяца без нуля в начале. 1 до 31
S Отображение 1 , 2 , 3 и т. Д. С указанием дня месяца. 1 , 2 , 3 и 4 -30

Время

G Отображение часа в 24-часовом формате без нуля в начале. 1 до 24
г Отображение часа в 12-часовом формате без нуля в начале. от 1 до 12
H Отображение часа в 24-часовом формате с нулем в начале. 01 по 24
ч Отображение часа в 12-часовом формате с нулем в начале. 01 по 12
А Отображать am / pm заглавными буквами. AM / PM
а Отображение am / pm строчными буквами. утра / вечера
i Отображение минут с нулем в начале. 01 до 60
с Отображение секунд с нулем в начале. 01 до 60

Пример-1: Использование функции date ()

В этом примере объясняются различные варианты использования функции date () . Первая функция date () вернет текущую системную дату в краткой форме. Вторая функция date () вернет текущее системное время.Третья функция date () вернет дату и время на основе значения временной метки. Функция strtotime () вернет значение отметки времени на основе значения, возвращаемого четвертой функцией date () .

// Отображаем текущую дату
echo «Сегодня» .date (‘d-M-Y’). «
«;
// Отображение текущего времени
echo «Текущее время» .date (‘h: m: i A’). «
«;
// Отображение даты на основе значения отметки времени
echo «Дата есть».date (‘l, jS F Y’, 1476721600). «
«;
// Отображение метки времени текущей даты
echo «Значение метки времени текущей даты:» .strtotime (date (‘d-m-y’));
?>

Вывод:
Следующий вывод появится после запуска сценария.

Использование функции PHP time ()

Используется для получения значения метки времени текущей даты. Символы формата времени, упомянутые выше для функции date () , могут использоваться для форматирования значения функции time () . Синтаксис этой функции приведен ниже.

Синтаксис:
время (void): int

Не имеет параметра и возвращает целочисленное значение в качестве метки времени.

Пример-2: Использование функции time ()

В следующем скрипте первая функция time () вернет значение метки времени системной даты и времени, поскольку второй параметр функции date () вернет форматированную дату. Таким же образом вторая функция date () вернет значение времени на основе возвращаемого значения второй функции time () .Как можно использовать функцию time () для определения разницы между двумя значениями временных меток, показано в следующей части этого скрипта. Два значения временных меток сохраняются в двух переменных с задержкой в ​​5 секунд.

// Печать даты на метке времени, созданной функцией time ()
echo «

Сегодня » .date («l, F d, Y», time ()). «

«;
// Распечатать время на метке времени, созданной функцией time ()
echo «

Текущее время «.date (‘h: i: s A’, time ()). «

«;
// Установить время начала
$ start_time = time ();
// Задержка на 5 секунд
sleep (5);
// Установить время окончания
$ end_time = time ();
// Распечатать разницу во времени.
echo «


Разница во времени . ($ End_time — $ start_time).» Seconds

«;
?>

Вывод:
Следующий вывод появится после запуска сценария. « l, F d, Y » используется в качестве символов формата в функции сценария first date () .Полное название дня недели печатается для символа « l », полное название месяца печатается для символа « F », день месяца печатается для символа « d », и печатается полное значение года. для символа « Y «. Затем « h: i: s A » используется в качестве символов формата в функции second date () для печати значений часа, минуты и секунды с AM / PM. Здесь функция sleep () вызывается с задержкой в ​​5 секунд. Итак, третий вывод показывает, что разница во времени между двумя значениями временной метки составляет 5 секунд.

Вывод:

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

PHP функция date () — w3resource

формат День:
d — Числовой день месяца с
ведущими нулями (от 01 до 31)
D — Сокращенное обозначение дня (три буквы).С пн по вс.
j — День месяца без ведущих нулей (от 1 до 31)
l (строчная ‘L’) — Полное название дня ( воскресенье суббота )
N — числовое представление ISO-8601 день недели
(с 1 (понедельник) до 7 (воскресенье)
S — английский порядковый суффикс дня месяца, 2 символа
( st , nd , rd или th . Хорошо работает с j )
w — Числовой день недели.(От 0 (воскресенье) до 6 (суббота)
z — числовой день года (от 0 до 365)

Неделя:

W — ISO-8601 числовое представление номера недели в году.
Неделя, начиная с понедельника
Месяц:
F — Полное название месяца. (С января по декабрь)
m — числовое представление месяца с ведущими нулями (от 01 до 12)
M — краткое сокращение месяца (три буквы). Янв с по Дек
n — Числовое представление месяца без ведущих нулей (от 1 до 12)
t — Количество дней в указанном месяце (с 28 по 31)

Год:
L — Будь то високосный год (установите 1, если високосный год, иначе 0)
o — номер года в соответствии с ISO-8601
Y — числовое значение года в 4-значном формате (1999)
y — числовое значение года в виде двух цифр (1999 как 99)

Время:
a — строчные буквы am или pm.
A — AM или PM заглавными буквами.
B — образец времени в Интернете (от 000 до 999)
g — 12-часовой формат часа без ведущих нулей (от 1 до 12)
G — 24-часовой формат часа без ведущих нулей (от 0 до 23)
h — 12-часовой формат часа с ведущими нулями (от 01 до 12)
H — 24-часовой формат часа с ведущими нулями (от 00 до 23)
i — Минуты с ведущими нулями (от 00 до 59)
s — Секунды, с ведущими нулями (от 00 до 59)
u — Микросекунды (числовое значение) Пример: 574925

Часовой пояс:
e — Идентификатор часового пояса (Примеры: UTC, Атлантика / Азорские острова)
I — Указывается ли дата в дневном режиме время (установите 1 для перехода на летнее время, в противном случае — 0)
O — Разница с временем по Гринвичу (GMT) в часах (пример: +0300).
p — разница со временем по Гринвичу (GMT) с двоеточием между часами и минутами (пример: +03: 00).
T — Аббревиатура часового пояса. (Примеры: EST, MDT)
Z — Смещение часового пояса в секундах. Смещение для часовых поясов к западу от UTC всегда отрицательно на
, а для часовых поясов к востоку от UTC всегда положительно. (От -43200 до 50400).

Полная дата / время:
c — Дата ISO 8601 (2004-02-12T15: 19: 21 + 00: 00)
r — Дата в формате RFC 2822. ( Чт, 22 января 2005 16:01:07 +0200 )
U — секунды с эпохи Unix (1 января 1970 00:00:00 GMT)

Дополнительно Строка

Руководство — Документация — Zend Framework

Zend_Locale_Format предоставляет несколько методов для работы с датами и время для преобразования и нормализации между разными форматами для разных языков.Использовать Zend_Date для управления датами и работы со строками даты, которые уже соответствуют одному из многих международных признанные стандартные форматы или один из локализованных форматов даты, поддерживаемых Zend_Date. Использование существующих предустановленных форматов предлагает преимущества, включая использование хорошо протестированного кода и уверенность в некоторой степени переносимость и функциональная совместимость (в зависимости от используемого стандарта). Примеры ниже не следуйте этим рекомендациям, поскольку использование нестандартных форматов даты излишне усложняют понимание этих примеров.

Даты и время нормализации

Метод getDate () анализирует строки, содержащие даты в локализованные форматы. Результаты возвращаются в виде структурированного массива с четко определенным ключи для каждой части даты. Кроме того, массив будет содержать ключ date_format показывает строку формата, используемую для анализа строки даты ввода. С локализованной даты строка не может содержать все части даты / времени, пары ключ-значение необязательны.за Например, если указан только год, месяц и день, то все значения времени подавляются из возвращенного массива, и наоборот, если только час, минута и секунда были заданы как Вход. Если в заданном вводе не может быть найдено ни даты, ни времени, будет исключение. брошен.

Если setOption (array (‘fix_date’ => true)) установлен, Метод getDate () добавляет ключ ‘fixed’ с целым числом указание, требует ли строка ввода даты «исправления» путем перестановки дня, месяца или год во входных данных, чтобы соответствовать используемому формату.

Ключевые значения для getDate () с опцией fix_date
значение означает
0 исправить нечего
1 исправлен ложный месяц
2 поменял местами день и год
3 поменял местами месяц и год
4 поменял местами месяц и день

Для тех, кому необходимо явно указать формат строки даты, следующие спецификаторы токена формата поддерживаются. Если используется недопустимый спецификатор формата, например спецификатор PHP ‘i’ в режиме формата ISO, тогда методы в Zend_Locale_Format выдадут ошибку которые поддерживают пользовательские форматы.

Эти спецификаторы (ниже) представляют собой небольшое подмножество полного набора «ISO», поддерживаемого ToString () из Zend_Date. Если вам нужно использовать описатели формата, совместимые с PHP date (), затем сначала вызовите setOptions (array (‘format_type’ => ‘php’)).И если вы хотите преобразовать только одну строку специального формата из PHP формат, совместимый с date (), с форматом «ISO» использовать convertPhpToIsoFormat (). В настоящее время единственный практический разница относится к спецификатору минут (‘m’ с использованием ISO по умолчанию и ‘i’ в формате даты PHP).

Возвращаемые значения
символ формата getDate () Ключ массива Возвращаемое значение Минимум Максимум
d день целое 1 31
M мес целое 1 12
г год целое без ограничений Максимальное целое число PHP
ч час целое 0 Максимальное целое число PHP
м минута целое 0 Максимальное целое число PHP
с секунды целое 0 Максимальное целое число PHP

Пример №1 Нормализация даты

  1. $ dateString = Zend_Locale_Format :: getDate (
  2. ’13. 04.2006 ‘,

  3. ‘date_format’ => ‘дд.ММ.гггг’,

  4. )

  5. );

  6. (

  7. [date_format] => дд.ММ.гггг

  8. [locale] => de_DE

  9. [день] => 13

  10. [месяц] => 04

  11. [год] => 2006

  12. )

  13. // создает объект Zend_Date для этой даты

  14. $ dateObject = new Zend_Date (‘13.04.2006 ‘,’ дд.ММ.гггг ‘);

  15. Zend_Date Object

  16. (

  17. [_locale: Zend_Date: private] => de_DE

  18. [_fractional: Zend_Date: private] => 0

  19. [_precision: Zend_Date: private] => 3

  20. [_unixTimestamp: Zend_Date_DateObject: private] => 1144879200

  21. [_timezone: Zend_Date_DateObject: private] => Европа / Берлин

  22. [_offset: Zend_Date_DateObject: private] => -3600

  23. [_syncronised: Zend_Date_DateObject: private] => 0

  24. [_dst: protected] => 1

  25. )

  26. // в качестве альтернативы некоторые типы проблем с входными данными могут быть

  27. // корректируется автоматически

  28. $ date = Zend_Locale_Format :: getDate (
  29. ’04. 13.2006 ‘,

  30. ‘date_format’ => ‘дд.ММ.гггг’,

  31. ‘fix_date’ => истина,

  32. )

  33. );

  34. (

  35. [date_format] => дд.ММ.гггг

  36. [locale] => de_DE

  37. [день] => 13

  38. [месяц] => 04

  39. [год] => 2006

  40. [фиксированный] => 4

  41. )

Поскольку getDate () «учитывает языковой стандарт», указав $ locale достаточно для строк даты, соответствующих этому языку формат.Параметр fix_date использует простые тесты, чтобы определить, день или месяц недействительны, а затем применяет эвристику, чтобы попытаться исправить любые обнаруженные проблемы. Обратите внимание на использование Zend_Locale_Format :: STANDARD в качестве значение для ‘date_format’, чтобы предотвратить использование значения по умолчанию для всего класса формат даты устанавливается с помощью setOptions (). Это заставляет getDate использовать формат даты по умолчанию для $ locale .

Пример # 2 Нормализация даты по языку

  1. $ locale = новый Zend_Locale (‘de_AT’);

  2. $ date = Zend_Locale_Format :: getDate (‘13.04.2006 ‘,
  3. массив (‘date_format’ =>
  4. Zend_Locale_Format :: СТАНДАРТ,

  5. ‘locale’ => $ locale)

  6. );

Полная дата и время возвращаются, если входные данные содержат дату и время в ожидаемый формат.

Пример # 3 Нормализация даты по времени

  1. $ locale = новый Zend_Locale (‘de_AT’);

  2. $ date = Zend_Locale_Format :: getDate (’13 .04.2005 22:14:55 ‘,
  3. массив (‘date_format’ =>
  4. Zend_Locale_Format :: СТАНДАРТ,

  5. ‘locale’ => $ locale)

  6. );

Если требуется конкретный формат, укажите аргумент $ format , без указания локали $ . Только однобуквенные коды (H, m, s, y, M, d), а MMMM и EEEE поддерживаются в формате $ .

Пример # 4 Нормализация заданной пользователем даты

  1. $ date = Zend_Locale_Format :: getDate (‘13200504T551422’,
  2. массив (‘date_format’ =>
  3. ‘ддыыыыММ ссммЧЧ’)

  4. );

Формат может включать следующие знаки:

Определение формата
Формат Letter Описание
d или dd День недели 1 или 2 цифры
М или ММ Одно- или двухзначный месяц
г или гг Год, 1 или 2 цифры
гггг год из 4 цифр
ч 1 или 2 цифры часа
м 1 или 2 цифры минуты
с 1 или 2 цифры секунды

Примеры правильных форматов:

Примеры форматов
Форматы Вход Выход
дд. ММ.гг 1.4.6 [‘день’] => 1, [‘месяц’] => 4, [‘год’] => 6
дд.ММ.гг 01.04.2006 [‘day’] => 1, [‘month’] => 4, [‘year’] => 2006
ггггMMdd 1.4.6 [‘день’] => 6, [‘месяц’] => 4, [‘год’] => 1

Примечание : Формат даты базы данных
Чтобы проанализировать значение даты в базе данных (f.е. MySql или MsSql), используйте Формат ISO_8601 Zend_Date вместо getDate ().

Опция fix_date использует простые тесты, чтобы определить, день или месяц недействителен, а затем применяет эвристику, чтобы попытаться исправить все обнаруженные проблемы. getDate () автоматически обнаруживает и исправляет некоторые виды проблем с вводом, например, неправильная установка года:

Пример № 5 Автоматическая корректировка дат ввода

  1. $ date = Zend_Locale_Format :: getDate (‘41.10.20 ‘,
  2. массив (‘date_format’ => ‘ddMMyy’,
  3. ‘fix_date’ => true)

  4. );

  5. // вместо 41 для дня будет возвращено 41 как значение года

Найдите разницу в датах с помощью PHP (и WordPress)

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

Однако, если вы работаете с WordPress, вероятность того, что вам понадобится работать с датами, довольно высока. Почти все, что мы публикуем, связано как минимум с одной датой.

Сюда входят сообщения, страницы, пользовательские типы сообщений, редакции, черновики и т. Д.

Кроме того, есть вероятность, что для выполнения нестандартной работы, которую вам нужно разработать, потребуется, чтобы вы обнаружили разницу в двух датах с использованием PHP. И хотя есть несколько способов сделать это, есть процесс, которому я кое-что следовал.

Разница в датах с использованием PHP

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

Общая идея может остаться прежней, поэтому суть того, что вы делаете, все еще можно экстраполировать из приведенного ниже кода. Но позвольте привести конкретный пример из моей собственной работы:

  1. У меня есть настраиваемый тип сообщения, представляющий событие и событие как дату публикации.
  2. Мне нужно знать, когда начнется мероприятие. Для этого я определяю формат даты, используя формат n / j / Y, поддерживаемый PHP, а затем конвертирую его в дату с помощью функции даты PHP.
  3. Затем я беру сегодняшнюю дату (как простой способ определить разницу в датах с помощью PHP для этого примера) и конвертирую ее в дату, используя ту же функцию и формат n / j / Y.
  4. После этого я создаю два объекта DateTime и вычисляю разницу.

Если это не так просто, я рекомендую перейти по ссылкам выше.В противном случае вот код.

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

Но учитывая две даты, это простой способ найти разницу в датах с помощью PHP в контексте WordPress.

PHP Обучение работе с датой и временем

Обновлено
08.07.2016
Выпущено
03. 03.2015 Нужно рассчитать дату третьего четверга каждого месяца или пятницу после следующего? PHP — и Дэвид Пауэрс — помогли вам.Дэвид показывает, как использовать сложные и иногда недостаточно используемые возможности функций даты и времени PHP, включая базовые функции форматирования даты / времени в PHP 4 и более продвинутые функции, представленные в PHP 5. Например, вы можете узнать, как найти и установить часовые пояса, вычисление даты с учетом различных часовых поясов и летнего времени, а также вычисление времени восходов и закатов. Начните смотреть и узнайте, как включить эти мощные функции в свой программный арсенал.Темы включают:
  • Как PHP обрабатывает дату и время
  • Установка часового пояса по умолчанию
  • Отображение текущей даты и времени
  • Получение метки времени из текста
  • Использование класса DateTime
  • Получение и изменение метки времени из DateTime
  • Сравнение объектов DateTime
  • Работа с часовыми поясами
  • Использование DateInterval и DatePeriod
  • Поиск дат недели по ISO
  • Расчет восхода и захода солнца

Уровень квалификации
Средний

4ч 31м

Продолжительность

45 934

Просмотры

Показать больше Показывай меньше

Q: Как вычисление восхода и захода солнца (как показано в главе 7) работает для мест к северу от полярного круга?

A: В полярных регионах date_sun_info () сообщает значение восхода и захода солнца как 1 в дни, когда солнце никогда не наборы. Значения пусты для дней, когда солнце никогда не встает.

Продолжить оценку

Вы начали это тестирование ранее, но не завершили его. Вы можете продолжить с того места, где остановились, или начать заново.

Продолжить Начать сначала

простых дат и времени PHP с использованием углерода — Vegibit

Даты и время PHP с использованием Carbon стали невероятно простыми благодаря интуитивно понятному API, предоставляемому этой замечательной библиотекой.Carbon расширяет собственный класс PHP DateTime, который дает ему доступ ко всем функциям, с которыми вы знакомы, в дополнение к некоторым другим замечательным новым функциям. Carbon использует собственное пространство имен, метко названное Carbon. Когда вы начнете, не забудьте импортировать это пространство имен, например, использовать Carbon / Carbon; быстро встать и бежать. Давайте рассмотрим некоторые из различных вещей, которые Carbon может сделать для нас, пока мы рассматриваем создание экземпляров, геттеры, сеттеры, форматирование строк, общие форматы, различия, модификаторы и многое другое.


Создать новый экземпляр Carbon

Первое, что мы сделаем, это просто создадим новый экземпляр класса Carbon , чтобы мы могли посмотреть, что это такое. Мы сделаем это, просто используя оператор new с классом Carbon и назначив его простой переменной с метко названным $ carbon .

$ карбон = новый Карбон;

var_dump ($ углерода);

Теперь мы можем осмотреть наш новый объект.

Здесь мы видим, что это объект класса Carbon \ Carbon. Следующее, что мы видим, — это общедоступное свойство под названием date , которое представляет собой строку, содержащую дату и время. timezone_type — это следующее открытое свойство, которое мы видим, которое является целым числом со значением 3, и общедоступное свойство с именем timezone , которое представляет собой строку со значением UTC. Для начала мы сосредоточимся на этой собственности и .


Использование углерода статическими методами

Другой подход, который мы могли бы использовать, — это вызвать статические методы прямо из класса Carbon, даже не создавая сначала экземпляр.Полезный метод — это метод now (). Давай попробуем прямо сейчас.

Карбон :: сейчас ()

$ углерода = Углерод :: сейчас ();

var_dump ($ углерода);

При проверке этого экземпляра с помощью var_dump () мы обнаруживаем, что у нас есть тот же тип объекта, что и при использовании подхода с использованием ключевого слова new для создания нового экземпляра класса Carbon. Можно сказать, что этот подход немного более читабелен, но на самом деле не имеет значения, что вы выберете.

Карбон :: сегодня ()

Carbon :: today () — еще один метод, который вы можете использовать, он немного отличается от Cabon :: now (). Вы можете использовать это, когда вас не столько заботит конкретный момент времени, сколько просто какой сейчас день. Таким образом, этот метод дает только строковое представление сегодняшнего дня без учета времени. Мы можем увидеть это, проверив var_dump и заметив, что время все равно нулю.

$ углерода = Углерод :: сегодня ();

var_dump ($ углерода);

Carbon :: завтра ()

Carbon :: завтра () — полезный метод динамического определения даты завтрашнего дня. В нашем предыдущем примере мы видели дату 11/11 2015 года. Если этот метод работает правильно, мы должны найти в наших выходных данных значение 11/12 2015 года.

$ carbon = Углерод :: завтра ();

var_dump ($ углерода);

Отлично. Обратите внимание, что дата увеличилась на единицу, и мы видим результат от 12 ноября 2015 года.

Углерод :: вчера ()

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

$ carbon = Углерод :: вчера ();

var_dump ($ углерода);

Этот код работает так, как мы и ожидали, поскольку он возвращает значение 11/10 за 2015 год, что действительно является прекрасным днем.

Углерод :: create ()

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

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

общедоступная статическая функция create ($ year = null, $ month = null, $ day = null, $ hour = null, $ minute = null, $ second = null, $ tz = null)

{

$ year = $ год === null? дата (‘Y’): $ год;

$ месяц = ​​$ месяц === null? дата (‘n’): $ месяц;

$ день = $ день === null? дата (‘j’): $ день;

if ($ hour === null) {

$ hour = date (‘G’);

$ минута = $ минута === null? дата (‘i’): $ минута;

$ секунда = $ секунда === null? дата (‘s’): $ секунда;

} else {

$ минута = $ минута === null? 0: $ минута;

$ секунда = $ секунда === null? 0: $ секунда;

}

return static :: createFromFormat (‘Ynj G: i: s’, sprintf (‘% s-% s-% s% s:% 02s:% 02s’, $ year, $ month, $ день, $ час, $ минута, $ секунда), $ tz);

}

При использовании Carbon :: create () вы обычно передаете параметры года, месяца, дня, часа, минуты, секунды и часового пояса. Сейчас мы это проверим.

$ carbon = Carbon :: create (1999, 12, 31, 23, 59, 59);

var_dump ($ углерода);

Это, конечно же, представляет канун Нового года, который был пятницей 31 декабря 1999 года, и оставалась ровно одна секунда до: «Да, они говорят, что вечеринка с двумя тысячами нулей закончилась, Ой, не вовремя, Итак, сегодня вечером я собираюсь повеселиться, как будто это 1999 год. , Да.Вы уловили идею.

Углерод :: createFromDate ()

Может быть, вам нужно создать объект только на основе даты, а не времени. Этот метод как раз то, что вам нужно для этого.

$ углерода = Углерод :: createFromDate (1999, 12, 31);

var_dump ($ углерода);

Это дает нам ту же дату, однако время просто заполняется текущим временем, а не конкретным временем, которое вы указываете в качестве параметров метода.

Углерод :: createFromTime ()

Этот метод позволяет установить конкретное время текущего дня.

$ carbon = Углерод :: createFromTime (13, 35, 55);

var_dump ($ углерода);

Обратите внимание, что время отражается как значения, которые мы передали, а дата — это пример сегодняшнего дня.

Углерод :: createFromTimestamp

Если у вас есть метка времени, из которой вы хотите создать экземпляр Carbon, мы можем использовать этот метод.

$ углерода = Углерод :: createFromTimestamp (0);

var_dump ($ углерода);

Это день рождения операционной системы Unix.

Давайте попробуем что-нибудь более подходящее для временной метки. http://www.unixtimestamp.com/ дает нам количество секунд, прошедших с 1 января 1970 года. Давайте перейдем к метке времени оттуда.

$ углерода = Углерод :: createFromTimestamp (1447271429);

var_dump ($ углерода);


Карбон для чайников

Теперь, когда мы рассмотрели различные способы создания объекта типа Carbon, давайте посмотрим на версию Создание экземпляра углерода для чайников .Я говорю это, потому что, когда вы создаете новый экземпляр Carbon, вы можете передать строку в удобочитаемой форме, а Carbon достаточно умен, чтобы создать то, что вы пытаетесь достичь. Например, мы можем создать конкретную дату вот так.

$ углерода = новый углерод («5 ноября 2013 года»);

var_dump ($ углерода);

$ углерода = новый углерод («5 ноября 2013 года»);

var_dump ($ углерода);

$ углерода = новый углерод (‘20131105’);

var_dump ($ углерода);

$ углерода = новый углерод (‘2013/11/5’);

var_dump ($ углерода);

$ carbon = новый карбон (’13-11-05 ‘);

var_dump ($ углерода);

$ углерода = новый углерод (‘2013-11-05’);

var_dump ($ углерода);

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

Мы также можем передать строку, которая представляет что-то вроде 3 дней назад или 4 дней спустя. В дополнение к этому вы можете указать плюс или минус часы, чтобы получить более подробную информацию. Вот несколько примеров.

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

18

19

20

21

22

23

24

25

26

27

28

29

30

34

35

36

37

38

39

40

41

$ углерода = новый углерод («- 3 дня»);

// объект (Carbon \ Carbon) [141]

// public ‘date’ => string ‘2015-11-08 21:31:13.000000 ‘(length = 26)

// public’ timezone_type ‘=> int 3

// public’ timezone ‘=> string’ UTC ‘(length = 3)

$ carbon = new Carbon (‘ — 4 недели’);

// объект (Carbon \ Carbon) [142]

// public ‘date’ => string ‘2015-10-14 21: 33: 08. 000000′ (length = 26)

// public ‘timezone_type ‘=> int 3

// общедоступный’ часовой пояс ‘=> строка’ UTC ‘(длина = 3)

$ carbon = new Carbon (‘ — 5 лет ‘);

// объект (Carbon \ Carbon) [141]

// public ‘date’ => string ‘2010-11-11 21:33:51.000000 ‘(length = 26)

// public’ timezone_type ‘=> int 3

// public’ timezone ‘=> string’ UTC ‘(length = 3)

$ carbon = new Carbon (‘ + 2 дня 9 часов »);

// объект (Carbon \ Carbon) [142]

// public ‘date’ => string ‘2015-11-14 06: 35: 06.000000’ (length = 26)

// public ‘timezone_type ‘=> int 3

// общедоступный’ часовой пояс ‘=> строка’ UTC ‘(длина = 3)

$ carbon = new Carbon (‘ + 3 недели 4 дня ‘);

// объект (Carbon \ Carbon) [141]

// public ‘date’ => string ‘2015-12-06 21:36:39.000000 ‘(length = 26)

// public’ timezone_type ‘=> int 3

// public’ timezone ‘=> string’ UTC ‘(length = 3)

$ carbon = new Carbon (‘ + 3 года 1 месяц 1 день 5 часов 33 минуты 25 секунд ‘);

// объект (Carbon \ Carbon) [142]

// public ‘date’ => string ‘2018-12-13 03: 12: 44. 000000′ (length = 26)

// public ‘timezone_type ‘=> int 3

// общедоступная’ часовой пояс ‘=> строка’ UTC ‘(длина = 3)

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


Форматирование дат и времени с помощью углерода

toDateString ()

Первый метод класса Carbon, который мы рассмотрим, — это toDateString (). Он берет дату в объекте Carbon и помещает ее в красиво отформатированную строку даты.

$ углерода = новый углерод («- 3 дня»);

$ formatted = $ carbon-> toDateString ();

var_dump ($ formatted);

// строка ‘2015-11-08’ (длина = 10)

toTimeString ()

Метод toTimeString () форматирует время в объекте Carbon до правильно отформатированной строки времени.

$ carbon = новый карбон (‘- 2 дня 10 часов’);

$ formatted = $ carbon-> toTimeString ();

var_dump ($ formatted);

// строка ’08: 26: 32 ‘(длина = 8)

В этом примере произошло то, что, поскольку мы фактически не указали время в конструкторе, текущее время используется во время выполнения кода.Однако у нас был пункт вычитания, и мы удалили 10 часов, так что это отражается в строке времени.

toDateTimeString ()

$ углерода = новый углерод («+ 5 дней»);

$ formatted = $ carbon-> toDateTimeString ();

var_dump ($ formatted);

// строка ‘2015-11-16 22:30:36’ (длина = 19)

toAtomString ()

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

$ углерода = новый углерод («завтра»);

$ formatted = $ carbon-> toAtomString ();

var_dump ($ formatted);

// строка ‘2015-11-12T00: 00: 00 + 00: 00’ (длина = 25)

toCookieString ()

С помощью метода toCookieString () легко отформатировать дату и время по стандарту cookie.

$ углерода = новый углерод («на следующей неделе»);

$ formatted = $ carbon-> toCookieString ();

var_dump ($ formatted);

// строка ‘Monday, 16-Nov-2015 22:37:20 UTC’ (length = 32)

toDayDateTimeString ()

Так работает метод toDayDateTimeString (), и результат очень приятный.

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toDayDateTimeString ();

var_dump ($ formatted);

// строка ‘среда, 11 ноября 2015 г., 22:39’ (длина = 26)

toFormattedDateString ()

toFormattedDateString () выводит ваш экземпляр Carbon следующим образом.

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toFormattedDateString ();

var_dump ($ formatted);

// строка ’11 ноября 2015 г. ‘ (длина = 12)

toIso8601String ()

Существует несколько стандартных форматов даты и времени. Это для ISO 8601.

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toIso8601String ();

var_dump ($ formatted);

// строка ‘2015-11-11T22: 42: 27 + 0000’ (длина = 24)

toRfc822String ()

Мы встроили поддержку RFC 822 с помощью метода toRfc822String ().

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toRfc822String ();

var_dump ($ formatted);

// строка ‘среда, 11 ноября 15 22:46:44 +0000’ (длина = 29)

toRfc850String ()

Получите строки в формате RFC 850 из объекта Carbon с помощью метода toRfc850String ().

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toRfc850String ();

var_dump ($ formatted);

// строка ‘среда, 11 ноября-15 22:53:09 UTC’ (длина = 33)

toRfc1036String ()

Форматирование даты и времени RFC 1036 — это легкий ветерок с методом toRfc1036String ().

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toRfc1036String ();

var_dump ($ formatted);

// строка ‘среда, 11 ноября 15 22:55:41 +0000’ (длина = 29)

toRfc1123String ()

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

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toRfc1123String ();

var_dump ($ formatted);

// строка ‘среда, 11 ноября 2015 г. 22:57:56 +0000′ (длина = 31)

toRfc2822String ()

Вам нужна строка в формате RFC 2822? Вам повезло с методом toRfc2822String ().

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toRfc2822String ();

var_dump ($ formatted);

// строка ‘среда, 11 ноября 2015 г. 22:59:52 +0000’ (длина = 31)

toRfc3339String ()

Может быть, RFC 3339 — это то, что вы ищете. Вам нужен метод toRfc3339String ().

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toRfc3339String ();

var_dump ($ formatted);

// строка ‘2015-11-11T23: 01: 48 + 00: 00’ (длина = 25)

toRssString ()

Метод toRssString () быстро форматирует дату и время в соответствии с RSS-потоком.

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toRssString ();

var_dump ($ formatted);

// строка ‘среда, 11 ноября 2015 г. 23:03:47 +0000’ (длина = 31)

toTimeString ()

Метод toTimeString () предлагает способ вывода в таком очень простом формате.

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toTimeString ();

var_dump ($ formatted);

// строка ’23: 04: 20 ‘(длина = 8)

toW3cString ()

Простое форматирование в строковый формат W3C с помощью метода toW3cString ().

$ углерода = новый углерод («сейчас»);

$ formatted = $ carbon-> toW3cString ();

var_dump ($ formatted);

// строка ‘2015-11-11T23: 07: 01 + 00: 00’ (длина = 25)

Все эти методы начинаются с , как мы видим здесь. Между названиями методов и форматами, которые они предоставляют, есть небольшое совпадение, но это позволяет вам структурировать код таким образом, чтобы он был наиболее понятным для вас. Другими словами, у вас достаточно сахара, чтобы упростить рассуждение во время разработки.

Теперь вы, возможно, думаете о стандартном способе форматирования дат в PHP при использовании таких вещей, как strtotime (), DateTime и date_create () в собственном PHP. Те же правила применяются для Carbon, и, если хотите, вы можете просто использовать метод format () таким образом.

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

18

19

20

21

22

23

24

25

26

27

28

29

30

34

35

36

37

38

39

40

41

42

43

44

45

46

48

51

52

53

54

55

56

57

58

59

60

61

62

63

9 0004 64

65

66

67

68

69

70

71

72

73

74

75

76

77

81

82

83

84

$ углерода = новый углерод («сейчас»);

$ formatted = $ углерода-> формат (‘l’);

var_dump ($ formatted);

// строка ‘четверг’ (длина = 8)

// ——————————— ———————— //

$ formatted = $ carbon-> format (‘l jS \ of FY h: i: s A ‘);

var_dump ($ formatted);

// строка ‘Четверг 12 ноября 2015 01:33:57 AM’ (длина = 42)

// ———————— ——————————— //

$ formatted = $ carbon-> format (DATE_RFC2822) ;

var_dump ($ formatted);

// строка ‘Thu, 12 Nov 2015 01:33:57 +0000’ (length = 31)

// ———————- ———————————- //

$ formatted = $ carbon-> format (DATE_ATOM );

var_dump ($ formatted);

// строка ‘2015-11-12T01: 33: 57 + 00: 00’ (длина = 25)

// ——————— ———————————— //

$ formatted = $ carbon-> format ( ‘l \ t \ h \ e jS’);

var_dump ($ formatted);

// строка ‘Четверг, 12-е’ (длина = 17)

// ——————————- ————————- //

$ formatted = $ carbon-> format (‘F j, Y, g: i a ‘);

var_dump ($ formatted);

// строка ’12 ноября 2015 г. , 1:33′ (длина = 26)

// ————————- ——————————- //

$ formatted = $ carbon-> format (‘»m.d.y ‘);

var_dump ($ formatted);

// строка ‘»11.12.15’ (длина = 9)

// —————————— ————————— //

$ formatted = $ carbon-> format (‘j, n, Y’);

var_dump ($ formatted);

// строка ’12, 11, 2015 ‘(длина = 12)

// ——————- ————————————- //

$ formatted = $ carbon-> format (‘Ymd’);

var_dump ($ formatted);

// строка ‘20151112’ (length = 8)

// —————- —————————————- //

$ formatted = $ углерод-> формат (‘\ i \ t \ i \ s \ t \ h \ e jS \ d \ a \ y.’);

var_dump ($ formatted);

// строка ‘это 12-й день.’ (длина = 19)

// —————————————— ————— //

$ formatted = $ carbon-> format (‘DM j G: i: s T Y’);

var_dump ($ formatted);

// строка ‘Thu Nov 12 1:33:57 UTC 2015’ (длина = 27)

// ———————— ——————————— //

$ formatted = $ carbon-> format (‘H: m: s \ m \ i \ s \ \ m \ o \ n \ t \ h ‘);

var_dump ($ formatted);

// строка ’01: 11: 57 м — месяц ‘(длина = 19)

// ————————— —————————— //

$ formatted = $ carbon-> format (‘H: i: s ‘);

var_dump ($ formatted);

// строка ’01: 33: 57 ‘(длина = 8)

// —————————— ————————— //

$ formatted = $ carbon-> format (‘Ymd H: i: s’ );

var_dump ($ formatted);

// строка ‘2015-11-12 01:33:57’ (длина = 19)

Вот, diffForHumans ()!

Это один из самых крутых методов в углеродной библиотеке. Что он делает, так это сравнивает текущую дату и время с тем, что хранится в текущем экземпляре Carbon. Например, сам экземпляр Carbon может содержать метку времени или некоторый формат даты и времени, полученные несколько дней назад или, возможно, даже что-то в будущем. Метод diffForHumans () создает действительно хорошо отформатированные и удобочитаемые форматы из этой разницы во времени. Давайте посмотрим на несколько примеров.

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

18

19

20

21

22

23

24

25

26

27

28

29

30

$ углерода = новый углерод («- 5 дней»);

$ formatted = $ carbon-> diffForHumans ();

var_dump ($ formatted);

// строка ‘5 дней назад’ (длина = 10)

// ——————————- ————————- //

$ carbon = new Carbon (‘+ 2 часа’);

$ formatted = $ carbon-> diffForHumans ();

var_dump ($ formatted);

// строка ‘через 2 часа’ (длина = 16)

// —————————— ————————— //

$ carbon = new Carbon (‘- 33 минуты’);

$ formatted = $ carbon-> diffForHumans ();

var_dump ($ formatted);

// строка ’33 минуты назад’ (длина = 14)

// ——————————- ————————- //

$ carbon = new Carbon (‘- 55 секунд’);

$ formatted = $ carbon-> diffForHumans ();

var_dump ($ formatted);

// строка ’55 секунд назад ‘(длина = 14)


Геттеры углерода

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

Функция получения данных

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

18

19

20

21

22

23

24

25

26

27

28

29

30

34

35

36

37

38

39

40

41

42

43

44

45

46

48

51

52

53

54

общедоступная функция __get ($ name)

{

switch (true) {

case array_key_exists ($ name, $ sizes = array (

‘year’ => ‘Y’,

‘yearIso’ => ‘o’,

‘month’ => ‘n’,

‘day’ => ‘j’,

‘hour’ => ‘G’,

‘minute’ => ‘i’,

‘second’ => ‘s’,

‘micro’ => ‘u’,

‘dayOfWeek’ => ‘w’,

‘dayOfYear’ => ‘z’,

‘weekOfYear’ => ‘ W ‘,

‘ daysInMonth ‘=>’ t ‘,

‘ timestamp ‘=>’ U ‘,

)):

return (int) $ this-> format ($ sizes [$ name]);

case $ name === ‘weekOfMonth’:

return (int) ceil ($ this-> day / static :: DAYS_PER_WEEK);

case $ name === ‘age’:

return (int) $ this-> diffInYears ();

case $ name === ‘квартал’:

return (int) ceil ($ this-> month / 3);

case $ name === ‘смещение’:

return $ this-> getOffset ();

case $ name === ‘offsetHours’:

return $ this-> getOffset () / static :: SECONDS_PER_MINUTE / static :: MINUTES_PER_HOUR;

case $ name === ‘dst’:

return $ this-> format (‘I’) === ‘1’;

case $ name === ‘local’:

return $ this-> offset === $ this-> copy () -> setTimezone (date_default_timezone_get ()) -> смещение;

case $ name === ‘utc’:

return $ this-> offset === 0;

case $ name === ‘часовой пояс’ || $ name === ‘tz’:

return $ this-> getTimezone ();

case $ name === ‘timezoneName’ || $ name === ‘tzName’:

return $ this-> getTimezone () -> getName ();

по умолчанию:

выбросить новое исключение InvalidArgumentException (sprintf («Неизвестный получатель ‘% s'», $ name));

}

}

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

$ углерода = новый углерод («сейчас»);

$ углерод-> год; // 2015

$ carbon-> yearIso; // 2015

$ carbon-> месяц; // 11

$ carbon-> day; // 12

$ carbon-> час; // 16

$ carbon-> minute; // 5

$ carbon-> second; // 1

$ carbon-> micro; // 0

$ carbon-> dayOfWeek; // 4

$ carbon-> dayOfYear; // 315

$ carbon-> weekOfYear; // 46

$ carbon-> daysInMonth; // 30

$ carbon-> timestamp; // 1447344301


Углеродные сеттеры

Так же, как у нас есть геттеры, с которыми мы можем работать в Carbon, чтобы упростить нам жизнь, Carbon также предоставляет прекрасную функциональность Setter.Использование сеттеров в Carbon похоже на другой способ создания экземпляра даты и времени в Carbon. Иногда проще явно установить год, месяц, день или час вручную, чем выяснить, как правильно передать в нужном формате для этого. Давайте посмотрим на исходный код Carbon, который делает эти сеттеры возможными. Мы видим, что он поддерживает установку года, месяца, дня, часа, минуты, секунды, отметки времени и часового пояса. Если вы передадите что-то, чего код не понимает, он выдаст исключение.

Функции сеттера

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

18

19

20

21

22

23

24

25

26

27

28

29

30

34

35

36

37

38

39

40

общедоступная функция __set ($ name, $ value)

{

switch ($ name) {

case ‘year’:

$ this-> setDate ($ value, $ this-> month, $ this- > день);

перерыв;

case ‘month’:

$ this-> setDate ($ this-> год, $ значение, $ this-> день);

перерыв;

case ‘day’:

$ this-> setDate ($ this-> год, $ this-> месяц, $ значение);

перерыв;

case ‘час’:

$ this-> setTime ($ value, $ this-> minute, $ this-> second);

перерыв;

case ‘minute’:

$ this-> setTime ($ this-> час, $ значение, $ this-> секунда);

перерыв;

case ‘second’:

$ this-> setTime ($ this-> час, $ this-> минута, значение $);

перерыв;

case ‘timestamp’:

parent :: setTimestamp (значение $);

перерыв;

case ‘часовой пояс’:

case ‘tz’:

$ this-> setTimezone ($ value);

перерыв;

по умолчанию:

выбросить новое исключение InvalidArgumentException (sprintf («Неизвестный установщик ‘% s'», $ name));

}

}

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

$ углерода = новый углерод («сейчас»);

var_dump ($ углерода);

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

Что же произойдет, если мы продолжим и установим некоторые значения в этом экземпляре Carbon? Давай выясним! Мы создадим новый экземпляр, установим некоторые свойства, затем создадим его с помощью var dump и также выведем результат в виде отформатированной строки.

$ углерода = новый углерод («сейчас»);

$ углерод-> год = 2012;

$ углерод-> месяц = ​​3;

$ углерод-> день = 5;

var_dump ($ углерода);

echo $ carbon-> toDayDateTimeString ();

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


Часовой пояс углерода

Carbon упрощает работу с часовыми поясами в PHP. Вы можете взаимодействовать с часовыми поясами в Carbon через свойство $ timezone и его псевдоним $ tz. Однако вам нужно будет убедиться, что вы используете один из часовых поясов, поддерживаемых в PHP. Например, вот список поддерживаемых часовых поясов в Америке. Обладая этими знаниями, давайте настроим новый экземпляр Carbon с часовым поясом Нью-Йорка.

$ углерода = Углерод :: сейчас (‘Америка / Нью-Йорк’);

var_dump ($ углерода);

Другой способ реализации часового пояса в Carbon — это такой.

$ carbon = Carbon :: createFromDate (2010, 5, 14, ‘Америка / Чикаго’);

var_dump ($ углерода);

// объект (Carbon \ Carbon) [141]

// public ‘date’ => string ‘2010-05-14 18: 35: 38. 000000′ (length = 26)

// public ‘timezone_type ‘=> int 3

// public’ timezone ‘=> строка’ America / Chicago ‘(длина = 15)

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

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

18

19

20

21

22

23

24

25

26

27

28

29

30

34

$ углерода = Углерод :: сейчас ();

$ carbon-> tz (‘Америка / Денвер’);

var_dump ($ углерода);

// объект (Carbon \ Carbon) [141]

// public ‘date’ => string ‘2015-11-12 11:39:03. 000000 ‘(length = 26)

// public’ timezone_type ‘=> int 3

// public’ timezone ‘=> string’ America / Denver ‘(length = 14)

$ carbon = Carbon ::сейчас же();

$ carbon-> setTimezone (‘Америка / Феникс’);

var_dump ($ углерода);

// объект (Carbon \ Carbon) [141]

// public ‘date’ => string ‘2015-11-12 11: 40: 49.000000’ (length = 26)

// public ‘timezone_type ‘=> int 3

// общедоступный’ часовой пояс ‘=> строка’ America / Phoenix ‘(длина = 15)

$ carbon = Carbon :: now ();

$ carbon-> tz = ‘America / Los_Angeles’;

var_dump ($ углерода);

// объект (Carbon \ Carbon) [141]

// public ‘date’ => string ‘2015-11-12 10:41:57.000000 ‘(length = 26)

// public’ timezone_type ‘=> int 3

// public’ timezone ‘=> string’ America / Los_Angeles ‘(length = 19)

Итак, мы видим, что Carbon довольно гибкий, и у вас есть несколько способов выполнить ту же задачу.


Управление датой и временем с помощью углерода

Когда вам нужно манипулировать датой и временем в чистом PHP, все может стать немного запутанным. Carbon предоставляет всевозможные полезные методы, которые позаботятся обо всех беспорядочных вычислениях за вас и позволяют легко манипулировать датами и временем, используя гораздо более читаемый синтаксис.

Добавить дни с помощью углерода

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

18

19

20

21

22

23

$ carbon = Carbon :: createFromDate (2015, 10, 30);

var_dump ($ углерода);

// объект (Carbon \ Carbon) [142]

// public ‘date’ => string ‘2015-10-30 18:47:21.000000 ‘(length = 26)

// public’ timezone_type ‘=> int 3

// public’ timezone ‘=> string’ UTC ‘(length = 3)

$ carbon-> addDays (1) ;

var_dump ($ углерода);

// объект (Carbon \ Carbon) [142]

// public ‘date’ => string ‘2015-10-31 18: 49: 01. 000000′ (length = 26)

// public ‘timezone_type’ = > int 3

// общедоступный ‘часовой пояс’ => строка ‘UTC’ (длина = 3)

$ carbon-> addDays (10);

var_dump ($ углерода);

// объект (Carbon \ Carbon) [142]

// public ‘date’ => string ‘2015-11-10 18:51:25.000000 ‘(длина = 26)

// общедоступный’ timezone_type ‘=> int 3

// общедоступный’ часовой пояс ‘=> строка’ UTC ‘(длина = 3)

Вычесть дни с помощью углерода

Так же, как мы можем легко прибавить заданное количество дней к объекту Carbon, мы можем так же легко вычесть дни.

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

18

19

20

21

22

23

$ carbon = Carbon :: createFromDate (2015, 10, 30);

var_dump ($ углерода);

// объект (Carbon \ Carbon) [142]

// public ‘date’ => string ‘2015-10-30 18:54:22. 000000 ‘(length = 26)

// public’ timezone_type ‘=> int 3

// public’ timezone ‘=> string’ UTC ‘(length = 3)

$ carbon-> subDays (1) ;

var_dump ($ углерода);

// объект (Carbon \ Carbon) [142]

// public ‘date’ => string ‘2015-10-29 18: 54: 22.000000’ (length = 26)

// public ‘timezone_type’ = > int 3

// общедоступный ‘часовой пояс’ => строка ‘UTC’ (длина = 3)

$ carbon-> subDays (10);

var_dump ($ углерода);

// объект (Carbon \ Carbon) [142]

// public ‘date’ => string ‘2015-10-19 18:54:22.000000 ‘(длина = 26)

// общедоступный’ timezone_type ‘=> int 3

// общедоступный’ часовой пояс ‘=> строка’ UTC ‘(длина = 3)

Это действительно так здорово. Мы видим, что Carbon обо всем позаботится за нас. Если нам случится добавить так много дней, что это уйдет в следующий месяц, Carbon достаточно умен, чтобы скорректировать месяц. Вы можете использовать еще массу методов, таких как add (), addDay (), addDays (), addHour (), addHours (), addMinute (), addMinutes (), addMonth (), addMonthNoOverflow (), addMonths () , addMonthsNoOverflow (), addSecond (), addSeconds (), addWeek (), addWeekday (), addWeekdays (), addWeeks (), addYear (), addYears (), sub (), subDay (), subDays (), subHour (), subHours (), subMinute (), subMinutes (), subMonth (), subMonthNoOverflow (), subMonths (), subMonthsNoOverflow (), subSecond (), subSeconds (), subWeek (), subWeekday (), subWeekdays () , subWeeks (), subYear () и subYears ().Есть много способов работать! Лучше всего проверить их на себе и посмотреть, что лучше всего подходит для вашего конкретного приложения.


Сравнение дат и времени в углероде

Carbon позволяет сравнивать два экземпляра Carbon по-разному, чтобы увидеть, как они соотносятся. Они больше, меньше, равны и т. Д. Лучший способ понять, как это работает, — это просто привести несколько примеров.

Проверка равенства дат

$ карбонон = новый Карбон;

$ carbontwo = новый карбон («+ 5 дней»);

if ($ carbonone-> eq ($ carbontwo)) {

echo ‘Две даты равны!’;

} else {

echo ‘Эти две даты не равны!’;

}

// Эти две даты не равны!

Проверка большего значения

$ карбонон = новый Карбон;

$ carbontwo = новый карбон («+ 5 дней»);

if ($ carbontwo-> gt ($ carbonone)) {

echo ‘Углерод 2 больше, чем Углерод 1!’;

} else {

echo ‘Углерод 2 * не * больше, чем Углерод 1!’;

}

// Углерод 2 больше, чем Углерод 1!

Проверка меньшего значения

$ карбонон = новый Карбон;

$ carbontwo = новый карбон («+ 5 дней»);

if ($ carbonone-> lt ($ carbontwo)) {

echo ‘Углерод 1 меньше, чем Углерод 2!’;

} else {

echo ‘Углерод 1 * не * меньше углерода 2!’;

}

// Углерод 1 меньше углерода 2!

Мы можем видеть, как работают методы gt (), lt () и eq (), которые позволяют нам быстро проверять равенство двух дат. Кроме того, вы можете использовать методы gte () и lte (), если вам нужно проверить ситуацию, которая больше или равна или меньше или равна.

Проверка дат с помощью углерода

У нас есть хороший метод между () для проверки, где существует дата между двумя заданными датами. Посмотрим, как это работает.

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

18

19

$ карбонон = новый Карбон;

$ carbontwo = новый карбон («+ 5 дней»);

$ carbonthree = новый углерод («+ 1 год»);

if ($ carbonone-> between ($ carbontwo, $ carbonthree)) {

echo ‘Углерод 1 находится между углеродом 2 и углеродом 3!’;

} else {

echo ‘Углерод 1 * не * находится между углеродом 2 и углеродом 3!’;

}

// Углерод 1 * не * находится между углеродом 2 и углеродом 3!

if ($ carbontwo-> between ($ carbonone, $ carbonthree)) {

echo ‘Углерод 2 находится между углеродом 1 и углеродом 3!’;

} else {

echo ‘Углерод 2 * не * находится между углеродом 1 и углеродом 3!’;

}

// Углерод 2 находится между углеродом 1 и углеродом 3!


Проверка разницы даты и времени с помощью Carbon

Вычисление разницы в датах — очень полезное приложение, которым вы можете воспользоваться. Углерод делает это довольно просто. Представим, что у нас есть две машины. Один был построен в 1988 году, а другой — в 2013 году. Как мы можем проверить разницу между этими двумя. Давайте посмотрим.

$ honda = новый карбон («10 января 1988 года»);

$ subaru = новый Карбон (’20 мая 2013′);

echo «Хонда была построена». $ Honda-> diffInYears ($ subaru). ‘ за годы до Subaru;

// Honda была построена на 25 лет раньше Subaru

Теперь, как и все остальное в Carbon, у вас есть гораздо больше доступных методов.

Поиграйте и посмотрите, что у вас получится.


Изменение даты и времени с помощью углерода

Когда мы говорим о модификаторах, мы смотрим на такие методы, как startOfDay (), startOfDecade (), startOfMonth (), startOfWeek (), startOfYear () и связанные с ними методы endOfDay (), endOfDecade (), endOfMonth ( ), endOfWeek () и endOfYear (). Если вам это нужно, есть также startOfCentury () и endOfCentury (), с которыми вы можете поработать. Мы можем проверить эти примеры.

$ углерода = Углерод :: сейчас ();

echo $ carbon-> endOfWeek () -> toDayDateTimeString ();

// вс, 15 ноя 2015, 23:59

$ углерода = Углерод :: сейчас ();

echo $ carbon-> startOfMonth () -> toDayDateTimeString ();

// вс, 1 ноября 2015 г., 00:00

$ углерода = Углерод :: сейчас ();

echo $ carbon-> startOfYear () -> toDayDateTimeString ();

// Чт, 1 января 2015 г., 00:00

Карбон Next

Метод next () действительно полезен в Carbon.Как часто вы разговариваете с другими людьми, используя следующую номенклатуру? Вы скажете: «Привет, Том, увидимся на следующей неделе!» или «Джилл, у меня не будет свободного вечера до следующей среды» и так далее и тому подобное. Метод next () в Carbon принимает целочисленное значение dayOfWeek, однако по умолчанию оно равно null. Напомним, что в PHP 0 — воскресенье, а 6 — суббота. Давай попробуем.

$ углерода = Углерод :: сейчас ();

echo «Эй, Джули, увидимся дальше».$ carbon-> next (3) -> формат (‘l \ t \ h \ e jS’);

// Привет, Джули, увидимся в следующую среду 18 числа

Если мы опустим аргумент метода next (), он просто переместится на одну неделю вперед, начиная с сегодняшнего дня. Сегодня четверг, когда мы пишем это, так что вот что получится, когда мы объединим с нашим удобным методом форматирования toCookieString ().

$ углерода = Углерод :: сейчас ();

echo $ carbon-> next () -> toCookieString ();

// Четверг, 19 ноября 2015 г., 00:00:00 UTC

Карбон Предыдущий

Дополнительным методом к next (), конечно же, является previous (). Давай попробуем.

$ углерода = Углерод :: сейчас ();

echo $ carbon-> предыдущий () -> toCookieString ();

// Четверг, 5 ноября 2015 г., 00:00:00 UTC


Копия

Метод copy () очень важен в Carbon. Причина в том, что если вы вызываете методы модификации для экземпляра Carbon, этот экземпляр немедленно обновляется напрямую.Это не копия объекта, а ссылка. Давайте посмотрим на пример.

$ углерода = новый углерод («Четверг, 12 ноября»);

$ carbon-> addDay ();

echo $ carbon-> формат (‘l’);

// пятница

Работает, как ожидалось. Мы создаем экземпляр Carbon на основе четверга, добавляем день и видим, что на выходе теперь пятница.Однако проверьте это.

$ карбонон = новый углерод («Четверг, 12 ноября»);

$ carbontwo = $ carbonone-> addDay ();

if ($ carbonone-> eq ($ carbontwo)) {

echo ‘в наши дни равны’;

} else {

echo ‘в наши дни * не * равны’;

}

// в эти дни равны

Это говорит о том, что $ carbonone и $ carbontwo равны, верно? Похоже, что $ carbonone должен быть четвергом, а $ carbontwo должен быть пятницей, почему здесь говорится, что дни равны? Давайте добавим метод copy (), чтобы добиться большей согласованности.

$ карбонон = новый углерод («Четверг, 12 ноября»);

$ carbontwo = $ carbonone-> copy () -> addDay ();

if ($ carbonone-> eq ($ carbontwo)) {

echo ‘в наши дни равны’;

} else {

echo ‘в наши дни * не * равны’;

}

// в наши дни * не * равны

Это поведение немного больше соответствует тому, что мы могли ожидать.В первом примере все, что мы делаем, это берем исходный экземпляр, добавляем день, а затем присваиваем его новой переменной. Однако исходная переменная, содержащая экземпляр Carbon, также обновляется, как и следовало ожидать от ситуации типа ссылки или указателя.

Во втором примере используется метод copy () для клонирования объекта, чтобы мы могли оставить исходный экземпляр Carbon нетронутым. Таким образом, когда вы добавляете плавные или связанные вызовы в конец экземпляра Carbon, который включает copy () в цепочке, вы можете оставить оригинал в неизменном состоянии. Я надеюсь, что в этом есть смысл. Давайте посмотрим еще на один пример, чтобы понять это.

Это работает неправильно

$ сегодня = Углерод :: сейчас ();

echo ‘Сегодня есть’. $ Today-> format (‘l’). ‘
‘;

$ завтра = $ сегодня-> addDay ();

echo ‘Сегодня’. $ Today-> format (‘l’). ‘ и Завтра — ‘. $ завтра-> формат (‘ l ‘);

// Сегодня четверг

// Сегодня пятница, завтра пятница

Добавление метода copy () заставляет все работать правильно

$ сегодня = Углерод :: сейчас ();

echo «Сегодня».$ сегодня-> формат (‘l’). ‘
‘;

$ завтра = $ сегодня-> copy () -> addDay ();

echo ‘Сегодня’. $ Today-> format (‘l’). ‘ и Завтра — ‘. $ завтра-> формат (‘ l ‘);

// Сегодня четверг

// Сегодня четверг, а завтра пятница


Углерод в реальном мире

Так что вы можете быть немного ошеломлены огромным количеством способов, с которыми вы можете взаимодействовать, обновлять, изменять и иным образом изменять даты и время с помощью Carbon Library. Я знаю это, потому что именно об этом я думаю! Однако, если серьезно, лучший способ увидеть, как углерод используется в реальном мире, — это посмотреть на проекты, которые на самом деле используют углерод. Лучший пример, который мы могли бы рассмотреть, — это Laravel Cashier, в котором активно используется Carbon. Посмотрим как.

Проверка на пробный период

/ **

* Определите, находится ли организация в рамках испытательного периода.

*

* @return bool

* /

общедоступная функция onTrial ()

{

if (! Is_null ($ this-> getTrialEndDate ())) {

return Carbon :: today () — > lt ($ this-> getTrialEndDate ());

} else {

возврат false;

}

}

Мы видим использование метода today () (создание экземпляра) и метода lt () (сравнение).

Проверка на льготный период

/ **

* Определите, находится ли организация в льготном периоде после отмены.

*

* @return bool

* /

общедоступная функция onGracePeriod ()

{

if (! Is_null ($ endAt = $ this-> getSubscriptionEndDate ())) {

return Carbon :: now () -> lt (Carbon :: instance ($ndsAt));

} else {

возврат false;

}

}

Мы видим использование методов now () (создание экземпляров) и lt () (сравнение), а также метода instance () (создание экземпляров).

Создание экземпляра Carbon из метки времени

/ **

* Получите углеродную дату для счета.

*

* @param \ DateTimeZone | string $ timezone

* @return \ Carbon \ Carbon

* /

public function date ($ timezone = null)

{

$ carbon = Carbon :: createFromTimestamp ($ this-> дата);

вернуть часовой пояс $? $ carbon-> setTimezone ($ timezone): $ углерода;

}

Здесь мы видим код, использующий метод createFromTimestamp () и метод setTimeZone (), который работает свободно.

Расчет оставшихся дней испытания

/ **

* Рассчитайте оставшиеся пробные дни на основе текущего окончания пробного периода.

*

* @param \ Carbon \ Carbon $ trialEnd

* @return void

* /

защищенная функция calculateRemainingTrialDays ($ trialEnd)

{

// Если в текущем плане еще есть пробная версия , мы сохраним это количество в

// раз в новом плане.Если на испытании не осталось времени, мы заставим его

// пропустить любые испытания по этому новому плану, так как это наиболее ожидаемые действия.

$ diff = Углерод :: сейчас () -> diffInHours ($ trialEnd);

return $ diff> 0? $ this-> trialFor (Углерод :: сейчас () -> addHours ($ diff)): $ this-> skipTrial ();

}

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


Easy PHP Date and Times with Carbon Summary

Как и большинство длинных руководств, мы уходим от этого, имея больше знаний по теме, чем мы начали. После тестирования всех этих различных методов на себе в собственной песочнице вы придумаете идеи о том, как лучше всего реализовать Carbon в ваших собственных проектах. Кроме того, мы смогли изучить использование углерода в реальном проекте с помощью популярного пакета Laravel Cashier.

Управление временем и датами в WordPress

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

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

Недавно нам потребовалось добавить «поминутную» детализацию к событиям в теме, которая раньше требовала только ежедневной детализации. Код темы хранил метаданные запланированного события с помощью функции PHP time () в WordPress. К сожалению, функция time () привела к сохранению неправильного значения времени, когда значение минут имело значение.Сохраненное время было смещено на шесть часов, из-за чего запланированные события не срабатывали вовремя. Намек на источник этой проблемы заключается в том, что время сервера было установлено на восточную часть США (на 6 часов позже UTC, когда выполнялась эта оценка).

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

Прокатитесь самостоятельно: плохая идея

Часовые пояса невероятно сложны и постоянно меняются. Добавьте летнее время, и рецепт безумия рождается. К счастью, эту проблему постоянно решают другие люди. По возможности не пытайтесь самостоятельно определять часовые пояса: все пойдет не так. Это не недостаток веры в способности какого-либо человека кодировать, а показатель того, насколько велика и сложна проблема. В этом случае лучше позволить другим позаботиться об этом.

Поищите в Google «проблемы программирования часовых поясов», чтобы получить множество примеров.

WordPress меняет и управляет временем для нас

При отслеживании проблемы «смещения часового пояса» мы обнаружили, что WordPress хорошо обрабатывает время. WordPress гарантирует, что в WordPress значения времени будут согласованными.

При работе первое, что делает WordPress, — это устанавливает локальный часовой пояс PHP на UTC. Поэтому, если сервер по восточному времени США и PHP настроен на один и тот же часовой пояс, WordPress переопределит его.У каждого блога есть настройка часового пояса в «Администратор >> Общие настройки >> Часовой пояс», в которой хранится параметр gmt_offset этого блога. WordPress использует этот параметр, если он есть, для расчета и корректировки времени, чтобы оно отображалось в часовом поясе блога.

Каждый блог в сети имеет свои собственные настройки, поэтому одна установка может обслуживать блоги в разных часовых поясах. Если в сети много сайтов, для которых необходимо установить один и тот же часовой пояс, каждый из них нужно будет установить вручную.Если сеть большая, вызовы get_option ('gmt_offset') можно отфильтровать, если требуется автоматическая настройка часового пояса (в отличие от ручного изменения множества параметров для отдельных блогов).

Исправление

time ()

WordPress предоставляет ряд функций времени, в первую очередь current_time () , которые нормализуют время блога на основе установленного часового пояса текущего блога (или возврата по умолчанию к UTC, если ни один не установлен).

Вышеупомянутые вызовы в теме PHP time () были легко исправлены путем их замены на WordPress current_time () .Это устранило необходимость переводить время в текущий часовой пояс, поскольку WordPress уже сделал это. Мы также видели код, который использовал вызовы MySQL для получения согласованного времени. Изменение его на использование current_time () может помочь при сглаживании временных складок или несоответствий.

Общие

В экосистеме WordPress используйте функции времени WordPress, а не системное время, PHP или MySQL.

Ссылка

current_time ($ type, $ gmt = 0)
Возвращает текущее местное время блога в указанном формате.
$ type — это mysql, timestamp или формат даты PHP (начиная с WordPress 3.9).
$ gmt по умолчанию использует настройки локального блога, если false (0), или GMT, если true (1).
Кодекс:
http://codex.wordpress.org/Function_Reference/current_time

get_the_time ($ format, $ post)
Возвращает время текущего сообщения для использования в PHP.
$ формат использует форматирование, указанное ниже.
$ post по умолчанию используется для текущего сообщения или примет идентификатор сообщения или объект.

Кодекс:
http://codex.wordpress.org/Function_Reference/get_the_time

Форматирование даты и времени в WordPress

Некоторые функции времени WordPress принимают параметр, который позволяет определить, как будет выглядеть дата. отображается. Строка формата — это шаблон, в котором различные части данных объединяются для создания даты в указанном формате.