PHP의 NOW () 함수


479

MySQL 함수와 동일한 형식으로 날짜와 시간을 반환하는 PHP 함수가 NOW()있습니까?

을 사용하여 수행하는 방법을 알고 date()있지만이 기능 만 있는지 묻고 있습니다.

예를 들어,

2009-12-01 00:00:00

2
좋은 질문. 모든 프로그래머가 기억하는 데 어려움을 겪는 아래 dateTime 솔루션을 가져 오는 데 간단하지만 효과적입니다.
Sweet Chilly Philly

답변:



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

자세한 내용은 여기를 참조하십시오 : http://pl.php.net/manual/en/function.date.php


3
나는 당신과 @troelskn이 2010 년 1 월 3 일 17:08에 어떻게 같은 대답을 보냈는지 강조하고 싶습니다. 귀하의 답변 제출은 아마도 그의 몇 초일 것입니다. :) 어쨌든 그것을 작성해 주셔서 감사합니다 : D
Aleksandar

9 초 후 ( "응답"이라고 표시된 경우 표시)
Grzegorz Oledzki

110

PHP 버전> = 5.4로 DateTime 은 다음을 수행 할 수 있습니다.

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

작동 참조하십시오 .


4
생성자를 감싸서 올바른 형식으로 지정하는 것이 좋습니다.
acme 2016 년

마지막으로 PHP는 델파이와 C #에서 복사하기 시작했습니다 :)
Erçin Dedeoğlu

1

8
@Asped 어떤 식으로 질문에 대답하지 않습니까? "MySQL 함수 NOW ()와 같은 형식으로 날짜와 시간을 반환하는"PHP 함수입니다.
vascowhite

@vascowhite-문제는이 목적을 위해 특정 기능이 있는지 여부였습니다. 답은 아니오입니다. 여기에 나열된 다른 모든 가능성은 효과가 있으며 귀하의 것 또한 훌륭하지만 도움이되지는 않습니다. 요청하는 사람이 이미 방법을 알고 있지만 더 쉬운 단일 목적의 기능을 원했기 때문에 :)
Asped

34

이 기능을 사용하십시오 :

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

25

이 시도:

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

181
그렇습니다. 그런 캐릭터를 낭비하면 캐릭터가 소진 될 것입니다.
Bill Karwin

4
그래, 내 나쁜 시간 ()은 실제로 필요하지 않습니다
퍼레이드

15
실제로 8 자.
Henrik Erlandsson 2016 년

52
여기의 모든 낭비를 고려할 때, 그는 큰 따옴표를 사용하는 것이 부끄러운 일이라고 생각합니다
Augie Gardner

37
캐릭터 낭비에 대해 언급하는 데 낭비되는 모든 캐릭터를 상상해보십시오!
Pwnball

25

짧은 답변

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

긴 답변을 보려면 아래를 읽으십시오.




PHP에서 MySQL NOW () 함수의 흉내

다음은 PHP에서 MySQL NOW()기능 을 모방 한 방법 목록입니다 .

// relative date
$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'); // Slightly higher performance, but less usable for date/time manipulations

// From Unix timestamp
// Using date_create() with a Unix timestamp will give you a FALSE,  
// and if you try to invoke format() on a FALSE then you'll get a: 
//     Fatal error: Call to a member function format() on boolean 
// So if you work with Unix timestamps then you could use: date_create_from_format().
$unixTimeStamp = 1420070400; // 01/01/2015 00:00:00
$y2015 = date_create_from_format('U', $unixTimeStamp, timezone_open('Europe/Amsterdam'))->format('Y-m-d H:i:s');
$y2015 = date('Y-m-d H:i:s', $unixTimeStamp);

date_create()->format('Y-m-d H:i:s')이 방법을 사용하면 시간대 / 시간대 조작을보다 쉽게 ​​처리 할 수 date('Y-m-d H:i:s')있으며 PHP 5.2부터 작동 하기 때문에 이것이 가장 좋은 방법 이라고 생각합니다 .


MySQL NOW () 함수

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:%s

여기의 변수는 읽기 전용 변수입니다. 따라서 변경할 수 없습니다.

MySQL NOW()함수는 datetime_format변수 에서 형식을 가져 오는 것 같습니다 .




date () 대신 date_create ()-> format ()의 장점

유리한 사실은 다음 date_create('now')->format('Y-m-d H:i:s')date('Y-m-d H:i:s')같습니다.

  • 시간 조작을보다 쉽게 ​​처리
  • 시간대를보다 쉽게 ​​처리
  • 죄송합니다

date () 대신 date_create ()-> format ()의 단점

이 기능 date()은보다 약간 더 나은 성능을 제공 date_create()->format()합니다. 아래의 벤치 마크 테스트를 참조하십시오.

$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $a = date_create('now')->format('Y-m-d H:i:s');
}
$end = time();                  
$elapsedTimeA = $end - $start;

echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';

$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $b = date('Y-m-d H:i:s');
}
$end = time();                   
$elapsedTimeB = $end - $start;

echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 31
Case B, elapsed time in seconds: 14

대문자 date()는 더 빠르다 는 것을 보여줍니다 . 그러나 테스트 시나리오를 약간 변경하면 결과가 달라집니다. 아래를보십시오 :

$start = time();
$dt = date_create('now');
for ($i = 0; $i <= 5000000; $i++) {
    $a = $dt->format('Y-m-d H:i:s');
}
$end = time();                  
$elapsedTimeA = $end - $start;

echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';

$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $b = date('Y-m-d H:i:s');
}
$end = time();                   
$elapsedTimeB = $end - $start;

echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 14
Case B, elapsed time in seconds: 15

DateTime 메서드 : format()보다 빠릅니다 date().




date () 대신 date_create ()-> format ()의 장점 자세히

자세한 설명은 계속 읽으십시오.

시간 조작을보다 쉽게 ​​처리

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()훨씬 더 합리적 입니다. 링크 : http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .date()date()php.inidate.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을 .

죄송합니다

OOP는 상태 전체 객체를 사용합니다. 그래서 나는 이런 식으로 생각하는 것을 선호합니다 :

// 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 () 대 new DateTime ()

유리한 사실은 다음 date_create()new DateTime()같습니다.

  • 네임 스페이스

네임 스페이스

네임 스페이스에서 작업하고 new 키워드를 사용하여 DateTime 객체를 초기화하려면 다음과 같이해야합니다.

namespace my_namespace;

// The backslash must be used if you are in a namespace.
// Forgetting about the backslash results in a fatal error.
$dt = new \DateTime();

이것에는 아무런 문제가 없지만 위의 단점은 사람들이 백 슬래시를 산발적으로 잊어 버린다는 것입니다. date_create()생성자 함수를 사용하면 네임 스페이스에 대해 걱정할 필요가 없습니다.

$dt = date_create(); // in or not in a namespace it works in both situations




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

18

나는 같은 대답을 찾고 있었고 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");

16

MySQL 함수 NOW()는 현재 타임 스탬프를 반환합니다. PHP에서 찾은 유일한 방법은 다음 코드를 사용하는 것입니다.

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

16

사용하기 쉬운 답변 하나 더 :

echo date('c');

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

이다 (PHP 5에서 추가) ISO 8601 날짜 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로 UTC를 지정한 다음 날짜를 표시 할 때만 사용자의 로케일로 변환하십시오.

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


11

또는 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

6

user1786647이 게시 한 솔루션이 마음에 들며 시간대를 함수 인수로 변경하고 반환 된 날짜 스탬프에 사용할 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");
}

6

매개 변수로 올바른 형식의 PHP 날짜 함수를 사용할 수 있습니다.

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

1

내장 PHP now()함수 는 없지만를 사용하여 수행 할 수 있습니다 date().

function now() {
    return date('Y-m-d H:i:s');
}

date_default_timezone_set()시간대를 변경해야하는 경우 사용할 수 있습니다 .

그렇지 않으면 Carbon 을 사용할 수 있습니다 -DateTime에 대한 간단한 PHP API 확장.


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


-1

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

PHP는 이제 addHour 등으로 클래스 추가 addMinute addYear를 고급화했습니다 ...

<?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

왜 한 줄의 코드로 완전히 만족할 수있는 클래스가 필요한 사람이 있습니까?!? 이 TLDR에 가치있는 것이 있으면 잘못된 질문에 대한 정답입니다.
mickmackusa

지금은 매번 대상이므로
dılo sürücü

OP는 특정 형식의 날짜 문자열 만 요청했습니다. 더 이상 없습니다. 날짜 / 시간 조작이 없습니다. 이것은 잘못된 질문에 대한 정답입니다.
mickmackusa


이 페이지의 5 개 답변 중 3 개에서 제안 된 솔루션이 수정되었습니다. 페이지 부풀림 (중복 컨텐츠 및 범위 외 조언)에 기여하고 있으며 이는 Stackoverflow에 좋지 않습니다.
mickmackusa

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.