Як отримати поточну дату та час у PHP?


Відповіді:


622

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

Я в Мельбурні, Австралія, тому у мене є щось подібне:

date_default_timezone_set('Australia/Melbourne');

Або інший приклад - LA - US :

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
Виклик до часу () зайвий, дата () автоматично використовуватиме поточний час.
занадто багато 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
Дякую за посилання підтримуваних часових поясів, я збирався його
гуглювати

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

95

Довідка: Ось посилання

Це може бути більш надійним, ніж просто додавання або віднімання кількості секунд за день або місяць до часової позначки через літній час.

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
другий аргумент функції дати вважається часом (), якщо його залишити порожнім.
Паоло Бергантіно

66

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


1
Варто зазначити, що часова мітка, повернута time()функцією, не залежить від часового поясу. (Тож дзвінки date_default_timezone_set("your-particular-timezone");раніше не матимуть ефекту.)
заборона-геоінженерія

@ бан-геоінженерія - не точно, що ви маєте на увазі під "незалежним від часового поясу"; це "залежно" від часового поясу, на якому встановлено сервер? Ви можете мати сервер на східному узбережжі, встановлений на часовий пояс на західному узбережжі, або навпаки.
Ніл Девіс

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 з OOP, це найкращий спосіб отримати дату та час.

<?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. Пакет часу на вуглецю

якщо ви використовуєте композитор , 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?", головна увага повинна приділятися цьому питанню. :)
Supun Praneeth

21

Використання:

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

Це працює.


Що я маю на увазі, це час повертається EST, коли я PST ... але чому? Це час сервера, а сервер - EST? Чи можу я отримати час для користувачів? Їх сервер може бути іншим часовим поясом, ні?

Функція дати - це час вашого сервера, або перевірити його, або тимчасово встановити його / без PHP перед запуском дати.
TravisO

дякую, моя служба не повинна бути в курсі php, оскільки O працює для GMT, але не P або "e" часового поясу ... дякую !!

Ця $ 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

Відповідно до статті Як отримати поточну дату (ЗАРАЗ) за допомогою 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необов’язково і за замовчуванням значення часу ().

А параметри -

формат - Обов’язковий. Визначає формат часової позначки

мітка часу - (необов'язково) Вказує часову марку. За замовчуванням - поточна дата та час

Як отримати просту дату

Необхідний параметр формату date()функції вказує, як відформатувати формат date (or time).

Ось кілька символів, які зазвичай використовуються для дат:

  1. d - Позначає день місяця (від 01 до 31)
  2. м - представляє місяць (від 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");
?>

Кілька корисних посилань


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

Що ви маєте на увазі під "часовим шкалом"?
Пітер Мортенсен

"часовий пояс", напевно.
Санем

2
Я вважаю , що @Jaymin може означати , якщо ви хочете , щоб налаштувати час вперед в день, назад в місяць і т.д.
Just 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

Ви можете використовувати цей код:

<?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

Зазвичай ця функція для дати корисна для всіх: дата ("Y / m / d");

Але час - це щось інше, тому що функція часу залежить або від версії PHP, або від системної дати.

Тому, ймовірно, використовуйте його так, щоб отримати власний часовий пояс:

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

Ця функція показує 24 години.


вона встановила для мене дату 1970 року!
iKamy

5

Ось кілька символів, які зазвичай використовуються часом:

  1. h - 12-годинний формат години з провідними нулями (від 01 до 12)
  2. i - Хвилини з провідними нулями (00 до 59)
  3. s - секунди з провідними нулями (00 до 59)
  4. a - Низький регістр меридієму та пост меридієма (ранку чи вечора)

Отримайте свій часовий пояс

<?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. м - представляє місяць (від 01 до 12)
  3. Y - представляє рік (у чотирьох цифрах)
  4. l (нижній регістр 'L') - Позначає день тижня

Джерело-W3-школи


1
Яка мета відстає .в date("Y/m/d") . ;?
Пітер Мортенсен

Я думаю, щоб об'єднати інший рядок або змінну. Дякую за внесені зміни :-)
Рахіль Хан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.