Обзор
Вот несколько функций, обычно используемых для обработки дат в 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)