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


Ответы:


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)

безусловно, лучший ~
— Яш Кумар Верма

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());

Как работают разные веб-серверы $_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)

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

Для нового программиста 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


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 г.


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');

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

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");

Что вы подразумеваете под "шкалой времени"?
— Питер Мортенсен

"часовой пояс", наверное.
— Saneem

2
Я полагаю, что @Jaymin может означать, если вы хотите скорректировать время на день вперед, на месяц назад и т. Д.
— Просто Plain High



10

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

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

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'); 

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



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));

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") . ;?
— Питер Мортенсен

Чтобы связать другую строку или переменную, я думаю. Спасибо за ваши правки. :-)
— Рахил Хан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.