Как узнать текущую дату и время в PHP?

851

Какая функция PHP может вернуть текущую дату / время?

Питер Мортенсен
источник
TLDR; $date = date('m/d/Y h:i:s a', time());
Я самый глупый человек

Ответы:

624

Время будет идти по времени вашего сервера. Простой обходной путь для этого - вручную установить часовой пояс, используя date_default_timezone_setперед date()вызовом time()функции или .

Я в Мельбурне, Австралия, поэтому у меня есть что-то вроде этого:

date_default_timezone_set('Australia/Melbourne');

Или другой пример - Лос-Анджелес - США :

date_default_timezone_set('America/Los_Angeles');

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

date_default_timezone_get();

Так что-то вроде:

$timezone = date_default_timezone_get();
echo "The current server timezone is: " . $timezone;

Таким образом, краткий ответ на ваш вопрос будет:

// Change the line below to your timezone!
date_default_timezone_set('Australia/Melbourne');
$date = date('m/d/Y h:i:s a', time());

Тогда все время будет в часовом поясе, который вы только что установили :)

Нью-Джерси.
источник
101
Вызов time () избыточен, date () автоматически использует текущее время.
слишком много php
11
ОП никогда не спрашивал о часовом поясе. Более простой и правильный ответ просто показал бы время сервера.
AyexeM
43
@AyexeM Я действительно оценил дополнительную информацию о часовом поясе. Это спасло меня от второго поиска.
Маркиззо
5
Вы можете получить все часовые пояса отсюда Часовой пояс
Юсеф Альтаф
13
@AyexeM Более простой и правильный ответ - не опустить потенциально важную и связанную информацию, а вместо этого ответить на вопрос, как вы предлагаете, но затем предоставить дополнительную информацию о часовых поясах под ним. Нет необходимости опускать потенциально важную информацию только потому, что ее не запрашивали.
Джейми
524
// Simply:
$date = date('Y-m-d H:i:s');

// Or:
$date = date('Y/m/d H:i:s');

// This would return the date in the following formats respectively:
$date = '2012-03-06 17:33:07';
// Or
$date = '2012/03/06 17:33:07';

/** 
 * This time is based on the default server time zone.
 * If you want the date in a different time zone,
 * say if you come from Nairobi, Kenya like I do, you can set
 * the time zone to Nairobi as shown below.
 */

date_default_timezone_set('Africa/Nairobi');

// Then call the date functions
$date = date('Y-m-d H:i:s');
// Or
$date = date('Y/m/d H:i:s');

// date_default_timezone_set() function is however
// supported by PHP version 5.1.0 or above.

Для получения справки о часовом поясе см. Список поддерживаемых часовых поясов .

Шадрак Б. Орина
источник
12
Это гораздо более прямой ответ, чем главный. Спасибо!
dev_willis
1
Спасибо за ссылку на поддерживаемые часовые пояса, я собирался его погуглить :)
htafoya
190

Начиная с PHP 5.2.0вы можете использовать DateTime()класс:

use \Datetime;

$now = new DateTime();
echo $now->format('Y-m-d H:i:s');    // MySQL datetime format
echo $now->getTimestamp();           // Unix Timestamp -- Since PHP 5.3

И указать timezone:

$now = new DateTime(null, new DateTimeZone('America/New_York'));
$now->setTimezone(new DateTimeZone('Europe/London'));    // Another way
echo $now->getTimezone();
мессия
источник
2
это хороший ответ, но вы забыли сказать, что нам нужно использовать \ Datetime перед вызовом :) ty
Amor.o
@ Amor.o Спасибо за хедз-ап, я обновил ответ сейчас - хотя немного поздно, и я честно не могу вспомнить получение уведомления для вашего комментария. Что касается использования Datatimeпространства имен; Я не могу вспомнить, было ли это в 2013 году, и я не писал никакого PHP-кода годами. В любом случае, ваше предложение кажется правильным, поэтому еще раз спасибо.
Махди
Добро пожаловать :)
Amor.o
96

Ссылка: вот ссылка

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

Код PHP

// Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the
// Mountain Standard Time (MST) Time Zone

$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');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$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 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
$today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)
ShapCyber
источник
безусловно, лучший ~
Яш Кумар Верма
67

PHP time () возвращает текущую временную метку Unix. При этом вы можете использовать функцию date () для форматирования в соответствии с вашими потребностями.

$date = date('Format String', time());

Как отметил Паоло в комментариях, второй аргумент является излишним. Следующий фрагмент кода эквивалентен приведенному выше:

$date = date('Format String');
Роб Хруска
источник
17
2-й аргумент функции даты предполагается, что время (), если оставить пустым.
Паоло Бергантино
66

Вы можете использовать $_SERVER['REQUEST_TIME']переменную (доступна с PHP 5.1.0) или time()функцию для получения текущей метки времени Unix.

гумбо
источник
1
Стоит отметить, что метка времени, возвращаемая time()функцией, не зависит от часового пояса. (Так что звонки date_default_timezone_set("your-particular-timezone");раньше не будут иметь никакого эффекта.)
ban-geoengineering
@ ban-geoengineering - не уверен, что вы подразумеваете под «независимым от часового пояса»; это "зависит" от часового пояса, на котором установлен сервер? Вы можете настроить сервер на восточном побережье на часовой пояс на западном побережье или наоборот.
Нил Дэвис
56

Вы можете использовать как $_SERVER['REQUEST_TIME']переменную, так и time()функцию. Оба они возвращают метку времени Unix.

В большинстве случаев эти два решения будут давать одинаковую метку времени Unix . Разница между ними заключается в том, что она $_SERVER['REQUEST_TIME']возвращает отметку времени самого последнего запроса к серверу и time()возвращает текущее время. Это может создать незначительные различия в точности в зависимости от вашего приложения, но для большинства случаев обоих этих решений должно быть достаточно.

Исходя из приведенного выше примера кода, вы захотите отформатировать эту информацию после получения метки времени Unix . Неформатированное время Unix выглядит так:1232659628

Таким образом, чтобы получить что-то, что будет работать, вы можете использовать date()функцию для его форматирования.

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

Например, следующий код возвращает дату, которая выглядит следующим образом 01/22/2009 04:35:00 pm:

echo date("m/d/Y h:i:s a", time());
Grizzly Peak Software
источник
Как работают разные веб-серверы $_SERVER['REQUEST_TIME'] ?
Pacerier
Лучший ответ руки вниз. Вы даже добавляете, как перейти от отметки времени UNIX к дате обычного человека, что очень ценится
Каньон Колоб
45

Функция даты PHP может сделать эту работу.

свидание()

Описание:

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

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

Примеры:

$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');   // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$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 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');   // 17:03:18 m is month
$today = date("H:i:s");                       // 17:16:18
$today = date("Y-m-d H:i:s");                 // 2001-03-10 17:16:18 (the MySQL DATETIME format)
Subodh Ghulaxe
источник
27
 $date = new DateTime('now', new DateTimeZone('Asia/Kolkata'));
 echo $date->format('d-m-Y H:i:s');

Обновить

 //Also get am/pm in datetime:
 echo $date->format('d-m-Y H:i:s a'); // output 30-12-2013 10:16:15 am

Для формата даты полезна функция PHP date () .

Кайлас
источник
25

это очень просто

echo $ date = date ('Ymd H: i: s');

Джунед Ансари
источник
25

Для нового программиста PHP может возникнуть путаница, почему существует множество методов для получения текущей даты и времени и какой метод использовать в своем проекте.

1. dateметод (PHP 4, PHP 5, PHP 7)

Это очень распространенный и самый простой способ получить дату и время в php.

// set the default timezone to use. Available since PHP 5.1
date_default_timezone_set('UTC');


// Prints something like: Monday
echo date("l");

// Prints something like: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

// Prints: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

/* use the constants in the format parameter */
// prints something like: Wed, 25 Sep 2013 15:28:57 -0700
echo date(DATE_RFC2822);

// prints something like: 2000-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));

Вы можете узнать больше об этом здесь

2. DateTimeкласс (PHP 5> = 5.2.0, PHP 7)

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

<?php
// Specified date/time in your computer's time zone.
$date = new DateTime('2000-01-01');
echo $date->format('Y-m-d H:i:sP') . "\n";

// Specified date/time in the specified time zone.
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

// Current date/time in your computer's time zone.
$date = new DateTime();
echo $date->format('Y-m-d H:i:sP') . "\n";

// Current date/time in the specified time zone.
$date = new DateTime(null, new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

// Using a UNIX timestamp.  Notice the result is in the UTC time zone.
$date = new DateTime('@946684800');
echo $date->format('Y-m-d H:i:sP') . "\n";

// Non-existent values roll over.
$date = new DateTime('2000-02-30');
echo $date->format('Y-m-d H:i:sP') . "\n";
?>

Вы можете узнать больше об этом здесь

3. Углеродная дата и время

Если вы используете Composer , Laravel , Symfony или любой другой фреймворк, это лучший способ узнать дату и время. Также этот пакет расширяет класс DateTime в php, поэтому вы используете все методы класса Datetime. Это встроенные фреймворки, такие как laravel, поэтому вам не нужно устанавливать его отдельно.

printf("Right now is %s", Carbon::now()->toDateTimeString());
printf("Right now in Vancouver is %s", Carbon::now('America/Vancouver')); // automatically converted to string
$tomorrow = Carbon::now()->addDay();
$lastWeek = Carbon::now()->subWeek();

// Carbon embed 823 languages:
echo $tomorrow->locale('fr')->isoFormat('dddd, MMMM Do YYYY, h:mm');
echo $tomorrow->locale('ar')->isoFormat('dddd, MMMM Do YYYY, h:mm');

$officialDate = Carbon::now()->toRfc2822String();

$howOldAmI = Carbon::createFromDate(1975, 5, 21)->age;

$noonTodayLondonTime = Carbon::createFromTime(12, 0, 0, 'Europe/London');

$internetWillBlowUpOn = Carbon::create(2038, 01, 19, 3, 14, 7, 'GMT');

if (Carbon::now()->isWeekend()) {
    echo 'Party!';
}
echo Carbon::now()->subMinutes(2)->diffForHumans(); // '2 minutes ago'

Вы можете узнать больше об этом здесь

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

Супун Пранит
источник
Мне понравились некоторые другие ответы, которые показывают, как форматировать строку даже с пользовательским текстом, или, скажем, какой формат лучше всего подходит для MySQL и т. Д., Но я бы определенно согласился с этим, чтобы показать все три типа и использования: процедурный, объектно-ориентированный и OOP-фреймворк ,
s3c
1
@ s3c Я мог бы ответить на что-то подобное, но вопрос «Как мне узнать текущую дату и время в PHP?», наш главный фокус должен быть на этом вопросе. :)
Супун Пранит
21

Использование:

$date = date('m/d/Y h:i:s a', time());

Оно работает.

Питер Мортенсен
источник
Что я имею в виду, когда EST возвращается, когда я PST ... но почему? Это время сервера и сервер EST? Могу ли я получить время пользователей? У их сервера может быть другой часовой пояс, нет?
Функция date - это время вашего сервера, либо проверьте его, либо временно установите / w PHP перед запуском date.
TravisO
спасибо, мой сервис не должен обновляться с php, потому что O работает для GMT, но не P или "e" часовой пояс ... спасибо !!
Это $ date = date ('m / d / Y h: i: s a', time ()); получает дату сервера, но все еще не получает мне дату пользователя. Это показывает мне в EST, когда я в PST. Я хочу получить дату, когда пользователь отправляет форму, и, как и я, их сервер может находиться в другом часовом поясе.
На самом деле, теперь, когда я думаю об этом, время не так важно, как дата. СПАСИБО ВСЕМ!!
18
echo date("d-m-Y H:i:sa");

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

Наим Моавия Сиддики
источник
1
Понравился за вводящий в заблуждение ответ. Нет, он не получит время вашего локального компьютера, если вы не используете сервер также локально. Он получит дату и время сервера.
MattWithoos
@MattWithoos - «Этот код получит дату и время« сервера », который он ничего не сказал о« локальной машине », о которой вы говорили. Вам также не нужно запускать сервер« локально »- вы можете иметь сервер в любой точке мира установлен часовой пояс, который вы хотите. Ваш нисходящий голос был совершенно неверным и безо всякой причины
Нил Дэвис,
1
@NealDavis Вы думали посмотреть на редактирование? Я разместил этот комментарий, предложил изменить неверную информацию и тем временем дождался ее утверждения. Теперь он одобрен и показывает правильную информацию.
MattWithoos
1
@NealDavis Кроме того, если вам надоело читать оригинальный пост, в нем буквально говорилось: «Этот код получит дату и время вашего локального компьютера (ПК)». Это вводит в заблуждение.
MattWithoos
16

Вы также можете использовать этот формат:

$date = date("d-m-Y");

Или

$date = date("Y-m-d H:i:s");
Калайвани М
источник
14

Согласно статье Как получить текущую дату (NOW) с помощью PHP , существует два распространенных способа получения текущей даты. Чтобы получить текущую дату (сейчас) с PHP, вы можете использовать dateкласс с любой версией PHP или лучше с datetimeклассом PHP> = 5.2.

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

Пример использования даты

Это выражение вернется сейчас в формате Y-m-d H:i:s.

<?php
    echo date('Y-m-d H:i:s');
?>

Пример использования класса datetime

Это выражение вернется сейчас в формате Y-m-d H:i:s.

<?php
    $dt = new DateTime();
    echo $dt->format('Y-m-d H:i:s');
?>
Дэвид
источник
13
<?php
echo "<b>".date('l\, F jS\, Y ')."</b>";
?>

Отпечатки как это

Воскресенье, 9 декабря 2012 г.

AMB
источник
12
<?php
// Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the
// Mountain Standard Time (MST) Time Zone

$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');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$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 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
$today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)
?>
Мистер Х.К.
источник
11

Установите часовой пояс:

date_default_timezone_set('Asia/Calcutta');

Затем вызовите функции даты

$date = date('Y-m-d H:i:s');
kkarayat
источник
11
date(format, timestamp)

В dateфункция возвращает строку , отформатированного в соответствии с заданным форматом строки , используя заданное целое число или временную метку текущего времени , если ни временная метка не задана. Другими словами, timestampявляется необязательным и по умолчанию имеет значение time ().

И параметры -

Формат - Обязательно. Определяет формат отметки времени

отметка времени - (необязательно). Указывает отметку времени. По умолчанию текущая дата и время

Как получить простое свидание

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

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

  1. d - представляет день месяца (с 01 по 31)
  2. m - представляет месяц (от 01 до 12)
  3. Y - представляет год (из четырех цифр)
  4. l (нижний регистр 'L') - представляет день недели

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

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

<?php
    echo "Today is " . date("Y/m/d") . "<br>";
    echo "Today is " . date("Y.m.d") . "<br>";
    echo "Today is " . date("Y-m-d") . "<br>";
    echo "Today is " . date("l");
?>

Несколько полезных ссылок

  • gmdate () - форматирует дату / время по Гринвичу / UTC
  • idate () - форматирует местное время / дату как целое число
  • getdate () - Получить информацию о дате / времени
  • getlastmod () - Получает время последней модификации страницы
  • mktime () - получает метку времени Unix для даты
  • strftime () - форматирует местное время / дату в соответствии с настройками локали
  • time () - возвращает текущую метку времени Unix
  • strtotime () - анализирует любое текстовое описание даты и времени на английском языке в метку времени Unix
  • Предопределенные константы DateTime
Joomler
источник
10

Если вы хотите другой график, пожалуйста, используйте:

$tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));
$nextyear  = mktime(0, 0, 0, date("m"),   date("d"),   date("Y")+1);

date_default_timezone_set("Asia/Calcutta");
echo date("Y/m/d H:i:s");
Jaymin
источник
Что вы подразумеваете под "шкалой времени"?
Питер Мортенсен
"часовой пояс", наверное.
Saneem
2
Я полагаю, что @Jaymin может означать, если вы хотите скорректировать время на день вперед, на месяц назад и т. Д.
Просто Plain High
10
date_default_timezone_set('Europe/Warsaw');
echo("<p class='time'>".date('H:i:s')."</p>");
echo("<p class='date'>".date('d/m/Y')."</p>");
Дариуш Дж
источник
10

Формат даты тоже зависит:

echo date("d/m/Y H:i:sa"); // 13/04/2017 19:38:15pm
Гектор Теран
источник
Это вряд ли понятно. Можете ли вы уточнить?
Питер Мортенсен
10

Вы можете использовать этот код:

<?php
    $currentDateTime = date('Y-m-d H:i:s');
    echo $currentDateTime;
?>
RichestSoft
источник
9

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

//Prints out something like 10:00am Just be sure to set your timezone correctly.
date_default_timezone_set("America/Chicago");
$TIME = date('G:ia'); 
Bullyen
источник
8

Другой простой способ - взять метку времени текущей даты и времени. Используйте функцию mktime () :

$now = mktime(); // Return timestamp of the current time

Затем вы можете преобразовать это в другой формат даты:

//// Prints something like: Thursday 26th of January 2017 01:12:36 PM
echo date('l jS \of F Y h:i:s A',$now);

Больше форматов даты здесь: http://php.net/manual/en/function.date.php

rtroulak
источник
7

Очень просто

date_default_timezone_set('Asia/Kolkata');
$date = date('m/d/Y H:i:s', time());
Коусиган Ацаям
источник
Я этого не видел.
Коусиган Ацаям
6
// Set the default timezone to use. Available since PHP 5.1
date_default_timezone_set('UTC');


// Prints something like: Monday
echo date("l");

// Prints something like: Monday 8th of August 2016 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

// Prints: July 1, 2016 is on a Saturday
echo "July 1, 2016 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2016));

/* Use the constants in the format parameter */
// Prints something like: Wed, 25 Sep 2013 15:28:57 -0700
echo date(DATE_RFC2822);

// Prints something like: 2016-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
Elyor
источник
6

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

$date = new DateTime();
$date->setTimeZone(new DateTimeZone("Asia/Dhaka"));
$get_datetime = $date->format('d.m.Y H:i:s');
А.А. Номан
источник
6

Обычно эта функция для даты полезна для всех: дата («г / м / д»);

Но время - это нечто иное, потому что функция времени зависит от версии PHP или системной даты.

Поэтому, вероятно, используйте это так, чтобы получить наш собственный часовой пояс:

$date = new DateTime('now', new DateTimeZone('Asia/Kolkata'));
echo $date->format('H:m:s');

Эта функция показывает время 24 часа.

Мина Арумугам
источник
это установило дату 1970 для меня!
iKamy
5

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

  1. ч - 12-часовой формат часа с ведущими нулями (от 01 до 12)
  2. я - минуты с ведущими нулями (от 00 до 59)
  3. s - секунды с ведущими нулями (от 00 до 59)
  4. а - строчные Анте меридием и пост меридием (утра или вечера)

Получите ваш часовой пояс

<?php
    date_default_timezone_set("America/New_York");
    echo "The time is " . date("h:i:sa");
?>

Проверьте это (необязательно)

<?php
    $d = mktime(11, 14, 54, 8, 12, 2014);
    echo "Created date is " . date("Y-m-d h:i:sa", $d);
?>

Для свидания

<?php
    echo "Today is " . date("Y/m/d") . ;
    echo "Today is " . date("Y.m.d") . ;
    echo "Today is " . date("Y-m-d") . ;
    echo "Today is " . date("l");
?>

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

  1. d - представляет день месяца (с 01 по 31)
  2. m - представляет месяц (от 01 до 12)
  3. Y - представляет год (из четырех цифр)
  4. l (нижний регистр 'L') - представляет день недели

Источник-W3-школа

Рахил Хан
источник
1
Какова цель отстающей .в date("Y/m/d") . ;?
Питер Мортенсен
Чтобы связать другую строку или переменную, я думаю. Спасибо за ваши правки. :-)
Рахил Хан