NOW() function in PHP
是否有一个PHP函数以与mysql函数
我知道如何使用
例如返回:
1 | 2009-12-01 00:00:00 |
除此之外:
1 |
1 |
请在此处查看更多详细信息:http://pl.php.net/manual/en/function.date.php
使用php版本>=5.4 datetime可以做到这一点:
1 | echo (new \DateTime())->format('Y-m-d H:i:s'); |
看它工作。
使用此功能:
1 2 3 4 5 6 7 8 | 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'); } |
试试这个:
1 |
简短回答
1 |
请阅读下面的长答案。
PHP中的拟态
为了在PHP中模拟mysql
1 2 3 4 5 | $now = date_create('now')->format('Y-m-d H:i:s'); // works in php 5.2 and higher $now = date_create()->format('Y-m-d H:i:s'); // also works in php 5.2 $now = new DateTime('now')->format('Y-m-d H:i:s'); // syntax error!!! $now = (new DateTime('now'))->format('Y-m-d H:i:s'); // works in php 5.4 and higher $now = date('Y-m-d H:i:s'); // works as well, but it's less nice then date_create() |
之所以这样做是因为mysql函数
1 2 3 |
这里的变量是只读变量。所以你不能改变它。我想mysql
日期创建()->格式()与日期()。
- 更容易处理时间操作
- 更容易处理时区
- 更多的O.O.P.
更容易处理时间操作
1 |
1 2 |
更容易处理时区
当时区很重要时,使用
可以在运行时更改时区。例子:
缺点是它会影响所有日期/时间函数。如果您将
PHP支持主要时区。有趣的是,它甚至支持北极圈和南极洲。你听说过
1 |
查看所有支持时区的列表:http://php.net/manual/en/timezones.php。
更多的O.O.P.
O.O.P.使用状态满对象。所以我更喜欢这样想:
1 2 3 4 | // Create a DateTime Object. // Use the DateTime that applies for tomorrow. // Give me the datetime in format 'Y-m-d H:i:s' $tomorrow = date_create('+1 day')->format('Y-m-d H:i:s'); |
然后这样想:
1 2 3 |
因此,我想说,对于我来说,
日期创建()->格式()的示例
如果必须填充一个数组,我将在我的项目中使用这种方法。这样地:
1 2 3 4 5 | $array = array( 'name' => 'John', 'date_time' => date_create('now')->format('Y-m-d H:i:s'), // uses the default timezone 'date_time_japan' => date_create('now', timezone_open('Asia/Tokyo'))->format('Y-m-d H:i:s'), ); |
mysql函数
1 |
我在寻找相同的答案,我已经为php 5.3或更高版本提出了这个解决方案:
1 2 3 | $dtz = new DateTimeZone("Europe/Madrid"); //Your timezone $now = new DateTime(date("Y-m-d"), $dtz); echo $now->format("Y-m-d H:i:s"); |
还有一个答案我觉得很容易使用:
1 2 3 |
这是MySQL使用的ISO 8601日期(添加在php 5中)
编辑MySQL5.7默认情况下不允许在日期时间中使用时区。您可以使用
默认情况下,mysql使用系统的时区,只要php使用相同的时区,就可以了。在我的例子中,CET/UTC+2。
这意味着,如果我将
当我把时间加载回PHP时,
1 | $importedDate = new \DateTime('2015-07-27T00:00:00') |
它会自动假定它是
1 2 | echo $importedDate->format('c'); // 2015-07-27T00:00:00+02:00 |
为了安全起见,请始终在服务器上使用UTC,在mysql和php中指定它,然后仅在显示日期时将其转换为用户区域设置:
1 2 3 4 5 6 7 | 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 |
使用
1 |
%F 与%Y-%m-%d 相同。%T 与%H:%M:%S 相同。
这是Ideone上的演示。
或者可以使用
1 |
以下是它们的列表:
1 2 3 4 5 6 7 8 9 10 11 12 | ATOM ="Y-m-d\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00 COOKIE ="l, d-M-Y H:i:s T" ; // -> Monday, 15-Aug-2005 15:52:01 UTC ISO8601 ="Y-m-d\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, d-M-y 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 M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000 RFC2822 ="D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000 RFC3339 ="Y-m-d\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00 ( == ATOM) RFC3339_EXTENDED ="Y-m-d\TH:i:s.vP" ; // -> 2005-08-15T15:52:01.000+00:00 RSS ="D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000 W3C ="Y-m-d\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00 |
对于调试,我更喜欢较短的(3v4l.org):
1 |
可以使用格式正确的php日期函数作为参数,
1 |
我喜欢用户1786647发布的解决方案,我对它进行了一些更新,将时区更改为一个函数参数,并添加了可选的支持,用于传递用于返回日期戳的Unix时间或日期时间字符串。
对于运行低于php 5.3版本的用户,还包括"settimestamp"的回退:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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("Y-m-d H:i:s"); } |
php等价物是
可以使用simplephp类来执行此操作:
1 | echo $date->now(); |
这个类还提供了许多有用的日期加、减和比较方法。您可以查看教程页面了解更多示例。