$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()
// 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'));
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');
}
9
除此之外:
date("Y-m-d H:i:s");
15
我发现一个易于使用的答案:
echo date('c');
// 2015-07-27T00:00:00+02:00
这是MySQL使用的 ISO 8601 date (added in PHP 5)
编辑
MySQL 5.7默认情况下不允许在datetime中使用时区 . 您可以使用 SQL_MODE=ALLOW_INVALID_DATES 禁用错误,请在此处获取更多详细信息:https://stackoverflow.com/a/35944059/2103434But that also means that the timezone will be lost when saving to the database!
默认情况下,MySQL使用系统的时区,只要php使用相同的时区,你应该没问题 . 在我的情况下CET / UTC 2 .
14 回答
使用strftime:
%F
与%Y-%m-%d
相同 .%T
与%H:%M:%S
相同 .这是关于ideone的a demo .
我正在寻找相同的答案,我已经为PHP 5.3或更高版本提出了这个解决方案:
我喜欢user1786647发布的解决方案,我稍微更新了一下,将时区更改为函数参数,并添加了可选的支持,用于传递Unix时间或日期时间字符串以用于返回的日期戳 .
对于运行低于PHP 5.3的版本的用户,还包括“setTimestamp”的后退:
你可以使用正确格式的php日期函数作为参数,
或者您可以使用DateTime constants:
这是他们的清单:
为了调试我喜欢更短的(3v4l.org):
MySQL函数
NOW()
返回当前时间戳 . 我找到PHP的唯一方法是使用以下代码 .试试这个:
Short answer
请阅读下面的长篇答案 .
Mimicry in PHP
要模仿PHP中的MySQL
NOW()
函数,可以使用date_create()->format('Y-m-d H:i:s')
. 这种方法可以让您更轻松地处理时间/时区操作date('Y-m-d H:i:s')
. 它更具可读性,自php 5.2以来一直有效 .之所以能正常工作是因为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'
,结果可能是这样的:这里的变量是只读变量 . 所以你无法改变它 . 我想MySQL
NOW()
函数从datetime_format
变量获取它的格式 .date_create()->format() VS date()
date_create('now')->format('Y-m-d H:i:s')
超过date('Y-m-d H:i:s')
的有利事实是:更容易处理时间操作
更容易处理时区
more o.o.p.
easier to handle time manipulations
date_create()
接受相对日期/时间格式(如now
,yesterday
或+1 day
),请参阅this link,示例:date()
也接受相对日期/时间格式,如下所示:easier to handle timezones
当时区很重要时,
date_create()->format()
的使用比date()
更有意义,因为date()
使用在date.timezone
指令的php.ini
中配置的默认时区 . (链接: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 .
more o.o.p.
O.O.P.使用state-full Object . 所以我更喜欢用这种方式思考:
然后以这种方式思考:
因此,我会说
date_create()->format()
方法对我来说更具可读性date()
.Example of date_create()->format()
如果我必须填充数组,我会将这种方法用于我的项目 . 像这样:
在这里查看更多详情:http://pl.php.net/manual/en/function.date.php
PHP版本> = 5.4 DateTime可以这样做: -
See it working .
使用此功能:
除此之外:
我发现一个易于使用的答案:
这是MySQL使用的 ISO 8601 date (added in PHP 5)
编辑
MySQL 5.7默认情况下不允许在datetime中使用时区 . 您可以使用
SQL_MODE=ALLOW_INVALID_DATES
禁用错误,请在此处获取更多详细信息:https://stackoverflow.com/a/35944059/2103434 But that also means that the timezone will be lost when saving to the database!默认情况下,MySQL使用系统的时区,只要php使用相同的时区,你应该没问题 . 在我的情况下CET / UTC 2 .
这意味着如果我将
2015-07-27T00:00:00+02:00
插入数据库,则只会存储2015-07-27T00:00:00
(但这是正确的本地时间!) .当我把时间加载到php时,
它将自动假设为
+02:00
时区,因为它是默认值 . 打印这个将是正确的:为安全起见,请始终在服务器上使用UTC,在MySQL和PHP中指定它,然后在显示日期时仅将其转换为用户区域设置:
您可以使用simplePHP类来执行此操作:
该类还提供了许多用于日期添加,减法和比较的有用方法 . 您可以check the tutorials page获取更多示例 .