Обработка даты и времени в PHP

PHP

Обзор

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

  • date(): отформатируйте метку времени в более удобочитаемую дату и время.
  • time(): получить текущую временную метку Unix.
  • strtotime(): преобразует строки, представляющие время и дату, в соответствующие метки времени.
  • mktime(): дата создания

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

название описывать дефолт PHP-версия
date.timezone Часовой пояс по умолчанию (все функции даты/времени используют этот параметр) "" PHP 5.1
date.default_latitude Широта по умолчанию (используется функциями date_sunrise() и date_sunset()) "31.7667" PHP 5.0
date.default_longitude Долгота по умолчанию (используется функциями date_sunrise() и date_sunset()) "35.2333" PHP 5.0
date.sunrise_zenith Зенит восхода солнца по умолчанию (используется функциями date_sunrise() и date_sunset()) "90.83" PHP 5.0
date.sunset_zenith Зенит заката по умолчанию (используется функциями date_sunrise() и date_sunset()) "90.83" PHP 5.0

Детали функции Date()

Синтаксис функции data() следующий:

string date ( string $format [, int $timestamp ] )
  • формат : обязательный, указывает формат выходной строки даты
  • timestamp : необязательный, указывает целочисленную временную метку Unix. По умолчанию используется текущее местное время time()
  • Возвращаемое значение представляет собой отформатированную строку времени.

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

Строка формата распознает следующееformatстрока параметров
format иллюстрировать пример возвращаемого значения
день --- ---
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прибыть365
Неделю --- ---
W Неделя года в формате ISO-8601, неделя начинается в понедельник (добавлено в PHP 4.1.0) Например:42(42-я неделя года)
Луна --- ---
F месяц в полнотекстовом формате, например, январь или март JanuaryприбытьDecember
m месяц в виде числа с ведущими нулями 01прибыть12
M месяц представлен трехбуквенной аббревиатурой JanприбытьDec
n месяц в виде числа без ведущих нулей 1прибыть12
t количество дней в указанном месяце 28прибыть31
год --- ---
L Это високосный год Если это високосный год1, иначе0
o Номер года в формате ISO-8601. с участием
Yто же самое, за исключением того, что если ISO
количество недель (W) относится к предыдущему или следующему году, то используется этот год. (Добавлено в PHP 5.1.0)
Examples: 1999 or 2003
Y Год полностью с 4 цифрами Например:1999или2003
y 2-значный год Например:99или03
время --- ---
a Значения AM и PM в нижнем регистре amилиpm
A Значения AM и PM в верхнем регистре AMилиPM
B Стандартное время в Интернете Swatch 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потому что принимает толькоinteger
параметры, при этомDateTime::format()Поддерживаются только миллисекунды.
Пример:654321
Часовой пояс --- ---
e Идентификатор часового пояса (добавлено в PHP 5.1.0) Например:UTC,GMT,Atlantic/Azores
I Является ли это летнее время Если летнее время1, иначе0
O Часы от среднего времени по Гринвичу Например:+0200
P Отличие от среднего времени по Гринвичу (GMT) с часами и минутами, разделенными двоеточием (добавлено в PHP 5.1.3) Например:+02:00
T Часовой пояс, в котором находится машина Например:EST,MDT([Примечание переводчика] в Windows
Ниже приведен полный текстовый формат, например «Восточное стандартное время», в китайской версии будет отображаться «Китайское стандартное время»).
Z Смещение разницы во времени в секундах. Смещение часового пояса к западу от UTC всегда отрицательное, а смещение часового пояса к востоку от UTC всегда положительное. -43200прибыть43200
полная дата/время --- ---
c Дата в формате ISO 8601 (новое в PHP 5) 2004-02-12T15:19:21+00:00
r Дата в формате RFC 822 Например:Thu, 21 Dec 2000 16:01:07 +0200
U Количество секунд, прошедших с эпохи Unix (1 января 1970 г., 00:00:00 по Гринвичу). видетьtime()
<?php
// 假定今天是:March 10th, 2001, 5:16:18 pm
$today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (MySQL DATETIME 格式)
$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day z ');  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // It is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 15:16:08 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:17 m is month
$today = date("H:i:s");                         // 17:16:17

date('Y'); // 当前年份
date('m'); // 当前月份
date('d'); // 当前是几号

подробности о функции strtotime()

Синтаксис функции strtotime() следующий:

int strtotime ( string $time [, int $now = time() ] )
  • time : строка даты/времени
  • now : метка времени, используемая для вычисления возвращаемого значения
  • Эта функция принимает строку, содержащую формат даты на английском языке (США), и пытается проанализировать ее как отметку времени Unix, значение которой зависит от времени, заданного параметром now, или текущего системного времени, если этот параметр не указан.
  • Возвращает отметку времени в случае успеха, в противном случае возвращает FALSE, до PHP 5.1.0 эта функция возвращала -1 в случае ошибки.
<?php
echo strtotime("now"), "\n";  // 现在时间戳
echo strtotime("10 September 2000"), "\n"; // 2000年10月现在时间戳
echo strtotime("+1 day"), "\n";  // 距离现在一天后的时间戳
echo strtotime("-3 day"), "\n";  // 距离现在三天前的时间戳
echo strtotime("+1 week"), "\n"; // 距离现在一周后的时间戳
echo strtotime("-1 month"), "\n";// 距离现在一个月前的时间戳
echo strtotime("+1 year"), "\n"; // 距离现在一年后的时间戳
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";  // 距离现在1周2天4小时2秒后的时间戳
echo strtotime("next Thursday"), "\n";  // 下个星期三
echo strtotime("last Monday"), "\n";    // 本月的最后一个星期一

Подробное введение в функцию mktime()

Синтаксис функции mktime() следующий:

int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
  • Параметры могут быть опущены справа налево, любой опущенный параметр будет установлен на текущее значение локальной даты и времени
  • час : количество часов
  • минута : количество минут
  • second : количество секунд (в пределах минуты)
  • месяц: номер месяца
  • день : количество дней
  • год: номер года
  • is_dst : для этого параметра можно установить значение 1, что означает переход на летнее время (DST), 0 означает, что время не переходит на летнее время, или -1 (значение по умолчанию) означает, что неизвестно, переходит ли время на летнее время. время или нет
  • Последний день любого месяца может быть представлен как «0» день следующего месяца вместо -1.
  • Если аргумент недействителен, эта функция возвращает FALSE (-1 до PHP 5.1).
<?php
$lastday = mktime(0, 0, 0, 3, 0, 2000);
echo strftime("Last day in Feb 2000 is: %d", $lastday);
$lastday = mktime(0, 0, 0, 4, -31, 2000);
echo strftime("Last day in Feb 2000 is: %d", $lastday);
?> 

Некоторые другие часто используемые функции

time() получает текущую временную метку Unix в секундах.Вы также можете использовать microtime() для получения текущей временной метки Unix и микросекунд.Эта функция часто используется для расчета времени, затрачиваемого на выполнение скриптов.

mixed microtime ([ bool $get_as_float ] )
  • При вызове без необязательных аргументов эта функция возвращает строку в формате «мс сек», где сек — это количество секунд, прошедших с начала эпохи Unix (0:00:00 1 января 1970 года по Гринвичу), а мс — часть микросекунд. Обе части строки возвращаются в секундах.
  • Если задан параметр get_as_float и его значение эквивалентно TRUE, microtime() вернет число с плавающей запятой.
  • Параметр get_as_float появился в PHP 5.0.0.
<?php
/**
 * 兼容php5.0版本以下
 */
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
usleep(100);  // 睡一小会儿
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "耗时: $time 秒\n";
?> 

Временные метки и временные строки

Инструкции по основным функциям

Используя функцию time(), вы получаете отметку времени Unix текущего времени, 10-значное целое число, представляющее количество секунд, прошедших с эпохи Unix (1 января 1970 г., 00:00:00 по Гринвичу).

С помощью функции strtotime() любое текстовое описание даты или времени на английском языке может быть преобразовано в отметку времени Unix. Возвращает ЛОЖЬ в случае ошибки.По возможности следует использовать формат ГГГГ-ММ-ДД или использовать функцию date_create_from_format().

С помощью функции date() отметку времени можно отформатировать как строку времени в указанном формате.

Базовый пример

$time = time(); // 当前时间戳
var_dump($time);  // int(1516155874)

$time_str = date('Y-m-d H:i:s', $time); // 将时间戳转化为相应的时间字符串
var_dump($time_str);  // string(19) "2018-01-17 02:24:34"

$time_int = strtotime($time_str);  // 将时间字符串转化为时间戳
var_dump($time_int); // int(1516155874)

Сбор общего времени

Чтобы получить время на основе определенного периода времени, вы можете использовать strtotime() или time(), чтобы получить текущее время и добавить или вычесть смещение в секундах из указанного времени.

  • Получить метку времени предыдущего дня: strtotime('-1 день') или time() - 3600 * 24
  • Получите метку времени в 0:00 сегодня: strtotime(date("Y-m-d"), time())
  • Получить метку времени определенного момента сегодняшнего дня, например 6:30: strtotime(data('Y-m-d')) + 6 * 3600 + 30 * 60

Рекомендации по запросам к базе данных

Данные типа timastamp или datetime сохраняются в базе данных.При запросе в PHP для запроса необходимо использовать строку времени, и результатом запроса также является строка времени.

Кроме того, если это временная метка, сохраненная в типе int, вам необходимо использовать временную метку для запроса. Результатом запроса является метка времени.


Пожалуйста, укажите источникОбработка даты и времени в PHP нравится (1)