PHP中的NOW()函数

时间:2010-01-03 17:07:19

标签: php datetime time timestamp

是否有PHP函数返回日期&时间采用与MySQL函数NOW()相同的格式?

我知道如何使用date()来做,但我问的是,是否只有这个功能。

例如返回:

2009-12-01 00:00:00

21 个答案:

答案 0 :(得分:914)

不是:

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

答案 1 :(得分:130)

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

点击此处了解更多详情:http://pl.php.net/manual/en/function.date.php

答案 2 :(得分:104)

使用PHP版本> = 5.4 DateTime可以执行此操作: -

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

See it working

答案 3 :(得分:32)

使用此功能:

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

答案 4 :(得分:24)

试试这个:

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

答案 5 :(得分:23)

简短回答

$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')。它更具可读性,并且自php 5.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()以这种格式给出了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() - &gt; format()VS date()

date_create('now')->format('Y-m-d H:i:s')超过date('Y-m-d H:i:s')的有利事实是:

  • 更容易处理时间操作
  • 更容易处理时区
  • more o.o.p。

更容易处理时间操作

date_create()接受相对日期/时间格式(如nowyesterday+1 day),请参阅this link,例如:

$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.inidate.timezone配置的默认时区1}}指令。链接: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()

date_create()的示例 - &gt; format()

如果我必须填充数组,我会将此方法用于我的项目。像这样:

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

答案 6 :(得分:15)

我一直在寻找相同的答案,我为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");

答案 7 :(得分:15)

MySQL函数NOW()返回当前时间戳。我找到PHP的唯一方法是使用以下代码。

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

答案 8 :(得分:14)

我发现一个易于使用的答案:

echo date('c'); 

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

这是 ISO 8601日期(在PHP 5中添加),MySQL使用

修改

MySQL 5.7默认情况下不允许在datetime中使用时区。您可以使用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

答案 9 :(得分:14)

使用strftime

strftime("%F %T");
  • %F%Y-%m-%d相同。

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

这里有#{3}}关于ideone。

答案 10 :(得分:10)

或者您可以使用DateTime constants

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

答案 11 :(得分:5)

我喜欢user1786647发布的解决方案,我稍微更新了一下,将时区更改为函数参数,并添加了可选的支持,用于传递Unix时间或日期时间字符串以用于返回的日期戳。

还包括&#34; setTimestamp&#34;对于运行低于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("Y-m-d H:i:s");
}

答案 12 :(得分:5)

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

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

答案 13 :(得分:1)

在PHP中,与MySQL函数now()等效的逻辑是time()。

但是time()返回的Unix时间戳不同于MySQL DATETIME。

因此,您必须将time()返回的Unix时间戳转换为MySQL格式。

您可以这样做: date(“ Y-m-d H:i:s”);

但是date()函数中的time()在哪里?这是第二个参数:实际上,您应该向date()提供一个时间戳作为第二个参数,但是如果省略,则默认为time()。

这是我能想到的最完整的答案。

问候。

答案 14 :(得分:0)

答案 15 :(得分:0)

没有内置的PHP <span><ul><%-data.resourceType%></ul></span> 函数,但是您可以使用now()来实现。

示例

date()

如果需要更改时区,可以使用function now() { return date('Y-m-d H:i:s'); }

否则,您可以使用Carbon-DateTime的简单PHP API扩展。

答案 16 :(得分:0)

不久

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

php高级版现在将额外的addMinute addYear类,例如addHour等...

<?php /** @noinspection PhpUnhandledExceptionInspection */

/**
 * Class Now
 * @author  dılo sürücü <berxudar@gmail.com>
 */
class Now
{

    /**
     * @var DateTime
     */
    private $dateTime;

    /**
     * Now constructor.
     * @throws Exception
     */
    public function __construct()
    {
        $this->dateTime = new DateTime('now');
    }


    /**
     * @param int $year
     * @return Now
     * @throws Exception
     * @noinspection PhpUnused
     */
    public function addYear(int $year): self
    {
        $this->dateTime->add(new DateInterval('P' . $year . 'Y'));

        return $this;
    }

    /**
     * @noinspection PhpUnused
     * @param int $month
     * @return Now
     * @throws Exception
     * @noinspection PhpUnused
     */
    public function addMonth(int $month):self 
    {
        $this->dateTime->add(new DateInterval('P' . $month . 'M'));

        return $this;
    }

    /**
     * @param int $day
     * @return $this
     * @throws Exception
     */
    public function addDay(int $day): self
    {
        $this->dateTime->add(new DateInterval('P' . $day . 'D'));
        return $this;
    }

    /**
     * @noinspection PhpUnused
     * @param int $week
     * @return $this
     * @throws Exception
     */
    public function addWeek(int $week): self
    {
        return $this->addDay($week * 7);
    }

    /**
     * @noinspection PhpUnused
     * @param int $second
     * @return $this
     * @throws Exception
     */
    public function addSecond(int $second): self
    {
        $this->dateTime->add(new DateInterval('PT' . $second . 'S'));
        return $this;
    }

    /**
     * @param int $minute
     * @return $this
     * @throws Exception
     */
    public function addMinute(int $minute): self
    {
        $this->dateTime->add(new DateInterval('PT' . $minute . 'M'));
        return $this;
    }

    /**
     * @param int $hour
     * @return $this
     * @throws Exception
     */
    public function addHour(int $hour): self
    {
        $this->dateTime->add(new DateInterval('PT' . $hour . 'H'));
        return $this;
    }


    /**
     * @return string
     */
    public function get(): string
    {
        return $this->dateTime->format('Y-m-d H:i:s');
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->get();
    }

}


/**
 * @return Now
 * @throws Exception
 */
function now()
{
    return new Now();

}





使用

  echo now(); //2020-03-10 22:10


echo now()->addDay(1); //2020-03-11 22:10


echo now()->addDay(1)->addHour(1); // //2020-03-11 23:10


echo now()->addDay(1)->addHour(1)->addMinute(30); // //2020-03-11 23:40


echo now()->addDay(1)->addHour(1)->addMinute(30)->addSecond(10); // //2020-03-11 23:50

//or u can use get method for example

echo now()->addDay(1)->addHour(1)->addMinute(30)->get(); // //2020-03-11 23:40

答案 17 :(得分:0)

如果您想获得现在的时间,包括 AM / PM

<?php 
    $time_now = date("Y-m-d h:i:s a");
    echo $time_now;
?>

它输出2020-05-01 05:45:28 pm

<?php 
    $time_now = date("Y-m-d h:i:s A");
    echo $time_now;
?>

它输出2020-05-01 05:45:28 PM

答案 18 :(得分:0)

您可能会发现这很有帮助

new \DateTime()

答案 19 :(得分:0)

我的回答是多余的,但是如果您是强迫症,视觉导向的人,并且只需要在代码中看到现在关键字,请使用:

date( 'Y-m-d H:i:s', strtotime( 'now' ) );

答案 20 :(得分:-3)

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

echo $date->now();

该类还提供了许多用于日期添加,减法和比较的有用方法。您可以check the tutorials page获取更多示例。