Функция PHP NOW ()

Има ли PHP функция, която връща датата и часа в същия формат като функцията MySQL NOW() ?

Знам как да направя това, използвайки date() , но питам дали има функция само за това.

Например, за да се върнете:

 2009-12-01 00:00:00 
421
03 янв. MoeAmine е определен на 03 януари 2010-01-03 20:07 '10 в 20:07 2010-01-03 20:07
@ 14 отговора

В допълнение:

 date("Ymd H:i:s"); 
882
03 янв. отговорът е даден troelskn 03 януари. 2010-01-03 20:08 '10 в 20:08 2010-01-03 20:08
 date('Ymd H:i:s') 
border=0

Вижте тук за повече информация: http://pl.php.net/manual/en/function.date.php

128
03 янв. отговорът е даден hsz Jan 03 2010-01-03 20:08 '10 в 20:08 2010-01-03 20:08

С PHP версията> = 5.4 DateTime можете да направите следното: -

 echo (new \DateTime())->format('Ymd H:i:s'); 

Вижте как работи .

99
13 июня '13 в 10:38 2013-06-13 10:38 отговорът е даден от vascowhite на 13 юни'13 в 10:38 часа 2013-06-13 10:38

Използвайте тази функция:

 function getDatetimeNow() { $tz_object = new DateTimeZone('Brazil/East'); //date_default_timezone_set('Brazil/East'); $datetime = new DateTime(); $datetime->setTimezone($tz_object); return $datetime->format('Y\-m\-d\ h:i:s'); } 
31
01 февр. отговорът е даден user1786647 01 Feb. 2013-02-01 22:26 '13 в 22:26 ч . 2013-02-01 22:26

Опитайте това:

 date("Ymd H:i:s"); 
24
03 янв. Отговорът е даден на улица parade 03 jan. 2010-01-03 20:10 '10 в 20:10 2010-01-03 20:10

Кратък отговор

 $now = date_create()->format('Ymd H:i:s'); 

Прочетете по-долу за дълъг отговор.




Мимикрия в php

За да имитирате функцията MySQL NOW() в PHP, можете да използвате date_create()->format('Ymd H:i:s') . Този подход ви позволява по-лесно да обработвате часови / часови зони от date('Ymd H:i:s') . Той е по-четлив и работи с php 5.2.

 $now = date_create('now')->format('Ymd H:i:s'); // works in php 5.2 and higher $now = date_create()->format('Ymd H:i:s'); // also works in php 5.2 $now = new DateTime('now')->format('Ymd H:i:s'); // syntax error!!! $now = (new DateTime('now'))->format('Ymd H:i:s'); // works in php 5.4 and higher $now = date('Ymd H:i:s'); // works as well, but it less nice then date_create() 

Причината за това е, че функцията MySQL NOW() осигурява стойност на dateTime в следния формат: 'YYYY-MM-DD HH:MM:SS' . Вижте тук: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now . Интересен факт е, че с помощта на тази заявка можете да получите формата на датата и часа: SHOW VARIABLES LIKE 'd%e_format' , резултатът може да изглежда по следния начин:

 Variable_name Value date_format %Y-%m-%d datetime_format %Y-%m-%d %H:%i:% 

Променливите тук са прочетени само за променливи. Така че не можете да го промените. Предполагам, че функцията MySQL NOW() получава формата си от променливата datetime_format .


date_create () → формат () VS дата ()

Благоприятни факти date_create('now')->format('Ymd H:i:s') в сравнение с date('Ymd H:i:s') :

  • по-лесно се справят с временни манипулации
  • по-лесно се справят с часовите зони
  • повече упс

по-лесно се справят с временни манипулации

date_create() приема формат за дата / час (като now , yesterday или +1 day ), вижте тази връзка , например:

 $tomorrow = date_create('+1 day')->format('Ymd H:i:s'); 

date() заема относим формат дата / час, например:

 $tomorrow = date('Ymd H:i:s', strtotime('+1 day')); $tomorrow = date('Ymd H:i:s', (time() + 86400)); // 86400 seconds = 1 day 

по-лесно се справят с часовите зони

Когато часовите зони са значими, използването на date_create()->format() прави много по-смислено от date() защото date() използва часовата зона по подразбиране, която е конфигурирана в php.ini в директивата date.timezone . (връзка: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone ). Можете да промените часовата зона, например date_default_timezone_set('Asia/Tokyo'); Но недостатъкът на това е, че той ще засегне всички функции за дата / час. Този проблем не съществува, ако използвате date_create()->format() в комбинация с timezone_open() .

PHP поддържа множество часови зони. Най-смешното е, че той подкрепя дори Полярния кръг и Антарктика. Чували ли сте някога за Longyearbyen ? Ако не, тогава не се притеснявайте, не съм чувал за това преди 5 минути. Но това, което PHP знае за Arctic/Longyearbyen добро.

Вижте Списък на всички поддържани часови зони: http://php.net/manual/en/timezones.php .

повече упс

ООП използва обекти с пълно състояние. Затова предпочитам да мисля така:

 // Create a DateTime Object. // Use the DateTime that applies for tomorrow. // Give me the datetime in format 'Ymd H:i:s' $tomorrow = date_create('+1 day')->format('Ymd H:i:s'); 

Тогава мисля така:

 // Give me a date time string in format 'Ymd H:i:s', // use strtotime() to calculate the Unix timestamp that applies for tomorrow. $tomorrow = date('Ymd H:i:s', strtotime('+1 day')); 

Ето защо бих казал, че date_create()->format() е date_create()->format() отколкото date() .


Пример date_create () → формат ()

Използвам този подход за моите проекти, ако трябва да запълня масив. Подобно на това:

 $array = array( 'name' => 'John', 'date_time' => date_create('now')->format('Ymd H:i:s'), // uses the default timezone 'date_time_japan' => date_create('now', timezone_open('Asia/Tokyo'))->format('Ymd H:i:s'), ); 
19
08 нояб. Отговорът е даден Юлиан 08 ноември. 2016-11-08 13:30 '16 в 13:30 ч. 2016-11-08 13:30

Функцията MySQL NOW() връща текущата времева маркировка. Единственият начин да намеря PHP е да използвам следния код.

 $curr_timestamp = date('Ymd H:i:s'); 
15
25 апр. отговорът е даден от Shriganesh Shintre 25 април 2015-04-25 02:08 '15 в 2:08 2015-04-25 02:08

Търсех същия отговор и предложих това решение за PHP 5.3 или по-нови:

 $dtz = new DateTimeZone("Europe/Madrid"); //Your timezone $now = new DateTime(date("Ymd"), $dtz); echo $now->format("Ymd H:i:s"); 
15
22 янв. отговорът е даден santi 22 jan. 2014-01-22 13:42 '14 в 13:42 2014-01-22 13:42

Използвайте strftime :

 strftime("%F %T"); 
  • %F съвпада с %Y-%m-%d .

  • %T същото като %H:%M:%S

Ето демонстрация на идеята.

14
12 нояб. отговор, даден от user669677 12 ноември 2013-11-12 18:43 '13 в 18:43 2013-11-12 18:43

Друг отговор, който мисля, че е лесен за използване:

 echo date('c'); // 2015-07-27T00:00:00+02:00 

Това е датата на ISO 8601 (добавена в PHP 5), която MySQL използва

за редактиране

MySQL 5.7 не позволява времева зона в datetime по подразбиране. Можете да деактивирате грешката, като използвате SQL_MODE=ALLOW_INVALID_DATES , за повече информация вижте отговора тук: medican.info.site/questions/485686 / ... Но това също означава, че часовата зона ще бъде загубена, когато се съхрани в базата данни!

По подразбиране MySQL използва системната часова зона и докато php използва същата часова зона, трябва да сте добре. В моя случай, CET / UTC + 2.

Това означава, че ако I 2015-07-27T00:00:00+02:00 до базата данни, само 2015-07-27T00:00:00 ще бъдат запазени (но това е правилното местно време!).

Когато заредя времето обратно в php,

 $importedDate = new \DateTime('2015-07-27T00:00:00') 

той автоматично ще приеме часовата зона +02:00 , тъй като това е по подразбиране. Отпечатването отново ще бъде правилно:

 echo $importedDate->format('c'); // 2015-07-27T00:00:00+02:00 

За да бъдете безопасни, винаги използвайте UTC на сървъра, посочете го в MySQL и PHP, след което го конвертирайте в локал на потребителя само когато показвате датата:

 date_default_timezone_set('UTC'); $importedDate = new \DateTime('2015-07-27T00:00:00+02:00'); echo $importedDate->format('c'); // 2015-07-27T00:00:00+02:00 $importedDate->setTimezone(new \DateTimeZone("America/New_York")); echo $importedDate->format('c'); // 2015-07-26T18:00:00-04:00 
13
20 июля '15 в 16:07 2015-07-20 16:07 отговорът е даден от Richard87 20 юли '15 в 16:07 2015-07-20 16:07

Или можете да използвате константите DateTime :

 echo date(DateTime::W3C); // 2005-08-15T15:52:01+00:00 

Ето списък с тях:

 ATOM = "Ymd\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00 COOKIE = "l, dMY H:i:s T" ; // -> Monday, 15-Aug-2005 15:52:01 UTC ISO8601 = "Ymd\TH:i:sO" ; // -> 2005-08-15T15:52:01+0000 RFC822 = "D, d M y H:i:s O" ; // -> Mon, 15 Aug 05 15:52:01 +0000 RFC850 = "l, dMy H:i:s T" ; // -> Monday, 15-Aug-05 15:52:01 UTC RFC1036 = "D, d M y H:i:s O" ; // -> Mon, 15 Aug 05 15:52:01 +0000 RFC1123 = "D, d MYH:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000 RFC2822 = "D, d MYH:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000 RFC3339 = "Ymd\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00 ( == ATOM) RFC3339_EXTENDED = "Ymd\TH:i:s.vP" ; // -> 2005-08-15T15:52:01.000+00:00 RSS = "D, d MYH:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000 W3C = "Ymd\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00 

За отстраняване на грешки предпочитам по-кратък ( 3v4l.org ):

 echo date('ymd\THisP'); // 180614T120708+02:00 
9
14 июня '18 в 13:03 2018-06-14 13:03 отговорът е даден от CPHPython на 14 юни 18: 13ч. 2018-06-14 13:03

Харесва ми решението, изпратено от потребител 1786647, аз го актуализира малко, за да промените часовата зона към аргумента функция и добавя допълнителна поддръжка за преминаване на времевата линия Unix или datetime, за да се използва датата на връщане.

Също така включва връщане към setTimestamp за потребители с версия под PHP 5.3:

 function DateStamp($strDateTime = null, $strTimeZone = "Europe/London") { $objTimeZone = new DateTimeZone($strTimeZone); $objDateTime = new DateTime(); $objDateTime->setTimezone($objTimeZone); if (!empty($strDateTime)) { $fltUnixTime = (is_string($strDateTime)) ? strtotime($strDateTime) : $strDateTime; if (method_exists($objDateTime, "setTimestamp")) { $objDateTime->setTimestamp($fltUnixTime); } else { $arrDate = getdate($fltUnixTime); $objDateTime->setDate($arrDate['year'], $arrDate['mon'], $arrDate['mday']); $objDateTime->setTime($arrDate['hours'], $arrDate['minutes'], $arrDate['seconds']); } } return $objDateTime->format("Ymd H:i:s"); } 
5
01 окт. отговорът е даден на Seth 01 oct. 2013-10-01 21:46 '13 в 21:46 2013-10-01 21:46

Можете да използвате функцията за дата php с правилния формат като параметър,

 echo date("Ymd H:i:s"); 
5
08 февр. отговорът е даден Som 08 feb. 2018-02-08 21:47 '18 в 21:47 ч. 2018-02-08 21:47

Можете да използвате класа SimplePHP за това:

 echo $date->now(); 

Този клас също така предоставя много полезни методи за добавяне, изваждане и сравняване на дати. Можете да проверите страницата с уроци за повече примери.

-2
30 марта '14 в 13:18 2014-03-30 13:18 отговорът е даден isa март 30 '14 в 13:18 2014-03-30 13:18

Други въпроси относно таговете или Ask a Question