天天看点

php now函数date,关于datetime:PHP中的NOW()函数

是否有一个PHP函数以与mysql函数NOW()相同的格式返回日期和时间?

我知道如何使用date()来实现它,但是我在问是否只有一个函数可以用于此目的。

例如返回:

2009-12-01 00:00:00

问得好。简单但有效地提出下面的日期时间解决方案,每个程序员都很难记住。

除此之外:

date("Y-m-d H:i:s");

注意,您可能需要使用date_default_timezone_set函数

谢谢你给我这个有用的提示。

mysqli中现在有函数名()吗?

date('Y-m-d H:i:s')

请在此处查看更多详细信息:http://pl.php.net/manual/en/function.date.php

使用php版本>=5.4 datetime可以做到这一点:

echo (new \DateTime())->format('Y-m-d H:i:s');

看它工作。

包装构造函数并正确格式化它的好主意。

最后,php开始从delphi和c:)复制

这也许不错,但根本回答不了问题,这样做既不容易也不快。

@以什么方式回答这个问题?它是一个php函数,它"以与mysql函数now()相同的格式返回日期和时间",这正是问题所在。

@瓦斯科维特-问题是是否有一个特定的功能,这一目的。所以答案是否定的。这里列出的所有其他可能性都可能有效,你的也很好,但没有帮助,因为问你的人已经知道如何做,但想要一个更简单的,单一用途的功能,而你的不是:)

另一个答案也没有回答这个问题。发布quesiton的chap已经知道了date()函数,他们只是重复了一遍。至少这个答案给这张桌子带来了新的东西。

不是吗(php 5>=5.2.0)?php.net/manual/en/class.datetime.php

@PenDrive否,因为5.4中引入了类成员对实例化的访问(例如(new foo)->bar())支持。请参阅发行说明。

哦,你的权利,没有考虑到实例化,而是考虑到日期时间本身。

用$variable=替换echo,这正是我需要的

这比Date('Y-m-d H:i:s')好吗?

我能够使用您的解决方案来解决我正在努力解决的"datetime now"问题。但是,我必须删除"datetime()"之前的"",使其成为…(new datetime())->format('y-m-d h:i:s');"希望这有帮助。谢谢您!和平。

@Masarapmabuhay听起来像是在使用过时的PHP版本。我很高兴我的回答对你有用。

这对我有效,没有做任何其他事情

在使用类的其他支持功能(这是常见的)时,强烈建议使用datetime以实现语法兼容性。这有助于改进代码的整体架构。

使用此功能:

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

}

试试这个:

date("Y-m-d H:i:s");

您不需要第二个参数….浪费6个字符。

好吧,如果你浪费这样的人物,我们会把他们赶走的。

是的,我的错,时间()实际上是不需要的。

实际上,这是浪费7个字符。

实际上是8个字符。

考虑到这里的浪费,我觉得他用了双引号很可耻

你们这些浪子回头!为什么不使用strftime("%f%t")并保存10个字符?

想象一下,所有的角色都浪费在评论浪费的角色上!

简短回答

$now = date_create()->format('Y-m-d H:i:s');

请阅读下面的长答案。

PHP中的拟态

为了在PHP中模拟mysql NOW()函数,可以使用date_create()->format('Y-m-d H:i:s')。这种方法允许您比date('Y-m-d H:i:s')更容易处理时间/时区操作。它的可读性更高,而且从PHP5.2开始就可以工作。

$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函数NOW()给出的日期时间值的格式是:'YYYY-MM-DD HH:MM:SS'。现在请参见:https://dev.mysql.com/doc/refman/8.0/en/date and time functions.html function_。一个有趣的事实是,通过运行此查询可以获得日期时间格式: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('now')->format('Y-m-d H:i:s')优于date('Y-m-d H:i:s')的有利事实是:

更容易处理时间操作

更容易处理时区

更多的O.O.P.

更容易处理时间操作

date_create()接受相对的日期/时间格式(如now、yesterday或+1 day见本链接,示例:

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

date()也接受相对日期/时间格式,如下所示:

$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));

$tomorrow = date('Y-m-d 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吗?如果没有,那么不要担心,在我阅读正式的PHP文档之前,我也没有。

$nowLongyearbyen = date_create('now', timezone_open('Arctic/Longyearbyen'))->format('Y-m-d H:i:s');

查看所有支持时区的列表:http://php.net/manual/en/timezones.php。

更多的O.O.P.

O.O.P.使用状态满对象。所以我更喜欢这样想:

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

然后这样想:

// Give me a date time string in format 'Y-m-d H:i:s',

// use strtotime() to calculate the Unix timestamp that applies for tomorrow.

$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));

因此,我想说,对于我来说,date_create()->format()方法比date()方法更易于阅读。

日期创建()->格式()的示例

如果必须填充一个数组,我将在我的项目中使用这种方法。这样地:

$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函数NOW()返回当前时间戳。我为PHP找到的唯一方法是使用以下代码。

$curr_timestamp = date('Y-m-d H:i:s');

我在寻找相同的答案,我已经为php 5.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");

还有一个答案我觉得很容易使用:

echo date('c');

// 2015-07-27T00:00:00+02:00

这是MySQL使用的ISO 8601日期(添加在php 5中)编辑

MySQL5.7默认情况下不允许在日期时间中使用时区。您可以使用SQL_MODE=ALLOW_INVALID_DATES禁用错误,请参阅此处的答案了解更多详细信息:https://stackoverflow.com/a/35944059/2103434,但这也意味着保存到数据库时,时区将丢失!

默认情况下,mysql使用系统的时区,只要php使用相同的时区,就可以了。在我的例子中,CET/UTC+2。

这意味着,如果我将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

使用strftime:

strftime("%F %T");

%F与%Y-%m-%d相同。

%T与%H:%M:%S相同。

这是Ideone上的演示。

或者可以使用DateTime常量:

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

以下是它们的列表:

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

echo date('ymd\THisP'); // 180614T120708+02:00

可以使用格式正确的php日期函数作为参数,

echo date("Y-m-d H:i:s");

我喜欢用户1786647发布的解决方案,我对它进行了一些更新,将时区更改为一个函数参数,并添加了可选的支持,用于传递用于返回日期戳的Unix时间或日期时间字符串。

对于运行低于php 5.3版本的用户,还包括"settimestamp"的回退:

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等价物是time():http://php.net/manual/en/function.time.php

错误答案!time() Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).

可以使用simplephp类来执行此操作:

echo $date->now();

这个类还提供了许多有用的日期加、减和比较方法。您可以查看教程页面了解更多示例。