PHP에서 UTC 시간 얻기


122

PHP의 date () 함수를 사용하여 UTC / GMT +/- 타임 스탬프를 얻으려면 어떻게해야합니까? 예를 들어 내가 시도하면

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

나는 유닉스 타임 스탬프를 얻을 것이다. 하지만 현지 타이밍에 따라 GMT / UTC +/- 0400 또는 GMT / UTC +/- 1000 문자열로 UTC / GMT 타임 스탬프를 가져와야합니다.


1
@JeffPuckettII GMT는 일광 절약을 위해 변경되지 않습니다. 영국은 여름에 GMT에서 BST로 변경되지만 GMT는 동일하게 유지되며 항상 UTC와 일치합니다.
lewis

답변:


111

를 사용 gmdate하면 항상 GMT 날짜가 반환됩니다. 구문은 for와 동일합니다 date.


12
@sanmai : Unix 타임 스탬프는 정의상 항상 UTC입니다. en.wikipedia.org/wiki/Unix_time
nikc.org

1
@ nikc.org : 문제는 gmdate ( "U")가 서버 시스템 시간대가 다른 경우 UTC 타임 스탬프가 아닌 time ()과 동일하게 반환된다는 것입니다. 내가 진짜 UTC 기반 타임 스탬프를 얻을 수 있었던 유일한 방법은 (gmdate ( "M D YH : 내가 : S")), strtotime으로했다, gmdate ( "U")는, 서버 시스템 시간대 UTC 다를 때 다른 어떤
bksi

@bksi 설명 된 행동을 반복 할 수 없습니다. (내 컴퓨터가 GMT에 있지 않고 UNIX 타임 스탬프가 정확합니다. 또한 gmdate("U") == time().) 잠재적으로 버그가있는 동작처럼 들립니다. PHP 프로젝트로 버그를 다시 확인하고 제출하십시오.
nikc.org

간단한 PHP 스크립트를 사용하여 시나리오를 테스트했습니다. echo time (). "===".strtotime (gmdate ( "M d YH : i : s")). "시간대 :".date ( "Z"). "\ n"; ?> 실행했을 때 다음과 같은 결과가 나타납니다. 1456342082 === 1456338482 시간대 : 3600 쉘 명령 날짜의 결과는 다음과 같습니다. Wed Feb 24 20:28:11 CET 2016
bksi

1
@bksi-아마도 datetime의 내부 표현과 datetime의 외부 표현을 혼동하고 있습니까? 영역 지정자가없는 시간 대 영역 지정자가있는 시간? nikc (및 문서)가 말했듯 time()이 "Unix Epoch 이후 (1970 년 1 월 1 일 00:00:00 GMT)"를 반환합니다. 참고 GMT. 기본적으로 시스템 이이를 표시하기 위해 시간대 로 변환 한다는 사실 은 사용자 편의입니다. 내부적으로는 항상 GMT입니다.
ToolmakerSteve


47

이전에 여기에 대답 했듯이 PHP 5.2.0부터 DateTime클래스를 사용하고 인스턴스로 UTC 시간대를 지정할 수 있습니다 DateTimeZone.

DateTime __construct () 문서 에서는 DateTime 인스턴스를 만들고 현재 시간을 가져 오기 위해 시간대를 지정할 때 첫 번째 매개 변수로 "now"를 전달하도록 제안합니다.

$date_utc = new \DateTime("now", new \DateTimeZone("UTC"));

echo $date_utc->format(\DateTime::RFC850); # Saturday, 18-Apr-15 03:23:46 UTC

3
DateTime __construct () 문서는 더 이상 현재 시간을 가져 오기 위해 첫 번째 매개 변수를 생략하도록 제안하지 않습니다. 이제 'now'문자열을 사용해야한다고 말합니다.
PaulSkinner

@PaulSkinner에게 감사드립니다. 대답을 수정했습니다.
Jessedc

감사합니다. 이전에 백 슬래시의 목적은 무엇 DateTime입니까? 직접 실행하면 그들 없이는 잘 작동하는 것 같습니다.
Snow

1
@Snow이 코드가 네임 스페이스 코드에 삽입되면 파일 namespace A의 맨 위에 선언이 있다고 가정 DateTime하면 PHP 는를 참조하는 것으로 간주 합니다 A\DateTime. 이는 잘못된 것입니다. 백 슬래시를 추가하면 문제가 해결됩니다. 제 생각에는 아직 네임 스페이스를 사용하지 않더라도 사용하는 것이 좋은 습관입니다.
Niavlys

35
$time = time();
$check = $time+date("Z",$time);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check);

3
@AlainTiemblo 정답이 아닙니다. 작동하려면 오프셋을
빼야


14

UTC 날짜 얻기

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

UTC 타임 스탬프 얻기

time();

결과는 date_default_timezone_set코드에 있어도 다르지 않습니다 .


@ زياد 덕분에 보정, 나는 내 대답을 수정 한
StefansArya

gmdate ()는 UTC가 아닌 GMT를 반환한다고 생각했습니다. "반환 된 시간이 그리니치 표준시 (GMT) 인 것을 제외하고 date () 함수와 동일합니다." 내가 뭔가를 놓치고 있습니까? 이것들은 동등하게 나오나요?
Jordan

3
@Jordan 실제로 UTC와 GMT는 같은 시간을 나타냅니다. stackoverflow.com/questions/48942916/…
martti

12

호출하는 gmdate것 외에 나머지 코드 앞에이 코드를 넣을 수도 있습니다.

<?php
date_default_timezone_set("UTC");
?>

그러면 나머지 날짜 / 시간 관련 호출이 GMT / UTC 시간대를 사용합니다.


최신 버전의 PHP에서는 더 이상 없습니다.
Khom Nazid

1
@KhomNazid "UTC"는 여전히 유효합니다. php.net/manual/en/…
Harikrishna

6

인수없이 gmmktime 함수를 사용하여 현재 UTC 타임 스탬프를 가져올 수 있습니다 .

$time = gmmktime();
echo date("Y-m-d H:i:s", $time); 

gmmktime은 서버 시간이 UTC를 사용하는 경우에만 작동합니다. 예를 들어, 내 서버는 US / Pacific으로 설정되어 있습니다. 위에 나열된 함수는 태평양 시간으로 되돌아갑니다.


gmmktime ()는 지원되지 않습니다
조니

2

현지 타이밍에 따라 GMT / UTC +/- 0400 또는 GMT / UTC +/- 1000 문자열 사용

현지 시간에서 시간대 오프셋을 제공하기 위해 맞춤 형식 이 누락되었습니다 O.

그리니치 시간 (GMT)과의 차이 (시간) 예 : +0200

date_default_timezone_set('America/La_Paz');
echo date('Y-m-d H:i:s O');

2018-01-12 12:10:11 -0400

그러나 최대한의 이식성 / 상호 운용성을 위해 ISO8601 날짜 형식을 사용하는 것이 좋습니다.c

date_default_timezone_set('America/La_Paz');
echo date('c');

2018-01-12T12 : 10 : 11-04 : 00

date_default_timezone_set('Australia/Brisbane');
echo date('c');

2018-01-13T02 : 10 : 11 + 10 : 00

또한 사용할 수 있으며 gmdate시간대 오프셋 문자열은 항상+00:00

date_default_timezone_set('America/La_Paz');
echo gmdate('c');

2018-01-12T16 : 10 : 11 + 00 : 00

date_default_timezone_set('Australia/Brisbane');
echo gmdate('c');

2018-01-12T16 : 10 : 11 + 00 : 00


1

다음을 사용하여 UTC 시간을 얻을 수 있습니다.

date_default_timezone_set('Asia/Calcutta');

$current_date = date("Y/m/d g:i A");

$ist_date = DateTime::createFromFormat(
                        '"Y/m/d g:i A"',
                        $current_date,
                        new DateTimeZone('Asia/Calcutta')
                    );

$utc_date = clone $ist_date;
$utc_date->setTimeZone(new DateTimeZone('UTC'));

echo 'UTC:  ' . $utc_date->format('Y-m-d g:i A');

0
/**
     * Converts a local Unix timestamp to GMT
     *
     * @param   int Unix timestamp
     * @return  int
     */
    function local_to_gmt($time = '')
    {
        if ($time === '')
        {
            $time = time();
        }

        return mktime(
            gmdate('G', $time),
            gmdate('i', $time),
            gmdate('s', $time),
            gmdate('n', $time),
            gmdate('j', $time),
            gmdate('Y', $time)
        );
    }

0

아래에서 현재 UTC (협정 세계시) 시간을 가져 오는 PHP 코드를 찾으십시오.

<?php
// Prints the day
echo gmdate("l") . "<br>";

// Prints the day, date, month, year, time, AM or PM
echo gmdate("l jS \of F Y h:i:s A");
?>

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