라이브러리를 사용하지 않고 HOPEFULLY (서버가있는 시간대에 관계없이) 날짜 타임 스탬프를 UTC로 변환하는 쉬운 방법이 필요합니다.
답변:
getTimezone 및 setTimezone을 시도하고 예제를 참조하십시오.
(하지만 이것은 클래스를 사용합니다)
최신 정보:
수업이 없으면 다음과 같이 시도 할 수 있습니다.
$the_date = strtotime("2010-01-19 00:00:00");
echo(date_default_timezone_get() . "<br />");
echo(date("Y-d-mTG:i:sz",$the_date) . "<br />");
echo(date_default_timezone_set("UTC") . "<br />");
echo(date("Y-d-mTG:i:sz", $the_date) . "<br />");
참고 : 시간대를 원래대로 다시 설정해야 할 수도 있습니다.
DateTime 사용 :
$given = new DateTime("2014-12-12 14:18:00");
echo $given->format("Y-m-d H:i:s e") . "\n"; // 2014-12-12 14:18:00 Asia/Bangkok
$given->setTimezone(new DateTimeZone("UTC"));
echo $given->format("Y-m-d H:i:s e") . "\n"; // 2014-12-12 07:18:00 UTC
다음과 같이하십시오.
gmdate('Y-m-d H:i:s', $timestamp)
또는 단순히
gmdate('Y-m-d H:i:s')
UTC로 "NOW"를 얻으려면.
참조 확인 :
이 형식의 날짜가 YYYY-MM-HH dd : mm : ss 인 경우 실제로 "datetime 문자열"끝에 UTC를 추가하고 strtotime을 사용하여 변환하여 PHP를 속일 수 있습니다.
date_default_timezone_set('Europe/Stockholm');
print date('Y-m-d H:i:s',strtotime("2009-01-01 12:00"." UTC"))."\n";
print date('Y-m-d H:i:s',strtotime("2009-06-01 12:00"." UTC"))."\n";
다음과 같이 인쇄됩니다.
2009-01-01 13:00:00
2009-06-01 14:00:00
보시다시피 일광 절약 시간 문제도 처리합니다.
그것을 해결하는 약간 이상한 방법 .... :)
:D
현지 시간대 문자열을 UTC 문자열로 변환합니다.
예 : 뉴질랜드 시간대
$datetime = "2016-02-01 00:00:01";
$given = new DateTime($datetime, new DateTimeZone("Pacific/Auckland"));
$given->setTimezone(new DateTimeZone("UTC"));
$output = $given->format("Y-m-d H:i:s");
echo ($output);
PHP 5.2.0부터 사용할 수있는 PHP의 DateTime 클래스를 사용해도 괜찮다 면 상황에 맞는 몇 가지 시나리오가 있습니다.
당신이 경우 $givenDt
당신은 UTC로 변환 할 것을 DateTime 개체를 다음이 UTC로 변환합니다 :
$givenDt->setTimezone(new DateTimeZone('UTC'));
$givenDt
나중에 원본이 필요한 경우 복제 된 개체를 변환하기 전에 지정된 DateTime 개체를 복제 할 수도 있습니다.
$utcDt = clone $givenDt;
$utcDt->setTimezone(new DateTimeZone('UTC'));
datetime 문자열 만있는 경우 (예 $givenStr = '2018-12-17 10:47:12'
:) 먼저 datetime 객체를 만든 다음 변환합니다. 이것은 $givenStr
PHP의 구성된 시간대에 있다고 가정 합니다.
$utcDt = (new DateTime($givenStr))->setTimezone(new DateTimeZone('UTC'));
주어진 datetime 문자열이 PHP 구성의 시간대와 다른 시간대에있는 경우 올바른 시간대를 제공하여 datetime 객체를 만듭니다 ( PHP가 지원하는 시간대 목록 참조 ). 이 예에서는 암스테르담의 현지 시간대를 가정합니다.
$givenDt = new DateTime($givenStr, new DateTimeZone('Europe/Amsterdam'));
$givenDt->setTimezone(new DateTimeZone('UTC'));
마찬가지로 , strtotime으로는 특정 입력 형식을 요구, 날짜 시간 :: createFromFormat이 사용될 수있다 ( PHP는 5.3+ 필요 )
// set timezone to user timezone
date_default_timezone_set($str_user_timezone);
// create date object using any given format
$date = DateTime::createFromFormat($str_user_dateformat, $str_user_datetime);
// convert given datetime to safe format for strtotime
$str_user_datetime = $date->format('Y-m-d H:i:s');
// convert to UTC
$str_UTC_datetime = gmdate($str_server_dateformat, strtotime($str_user_datetime));
// return timezone to server default
date_default_timezone_set($str_server_timezone);
나는 때때로이 방법을 사용합니다.
// It is not importnat what timezone your system is set to.
// Get the UTC offset in seconds:
$offset = date("Z");
// Then subtract if from your original timestamp:
$utc_time = date("Y-m-d H:i:s", strtotime($original_time." -".$offset." Seconds"));
대부분 의 경우 작동 합니다 .
http://php.net/manual/en/function.strtotime.php 또는 문자열 대신 시간 구성 요소를 사용해야하는 경우 http://us.php.net/manual/en/function.mktime. PHP
PHP 5 이상에서는 datetime :: format 함수를 사용할 수 있습니다 ( http://us.php.net/manual/en/datetime.format.php 문서 참조 )
echo strftime( '%e %B %Y' ,
date_create_from_format('Y-d-m G:i:s', '2012-04-05 11:55:21')->format('U')
); // 4 May 2012
모든 시간대에서 다른 시간대로 모든 타임 스탬프를 형식화하는 범용 정규화 기능. 관계형 데이터베이스에 다른 시간대의 사용자 날짜 타임 스탬프를 저장하는 데 매우 유용합니다. 데이터베이스 비교를 위해 타임 스탬프를 UTC로 저장하고gmdate('Y-m-d H:i:s')
/**
* Convert Datetime from any given olsonzone to other.
* @return datetime in user specified format
*/
function datetimeconv($datetime, $from, $to)
{
try {
if ($from['localeFormat'] != 'Y-m-d H:i:s') {
$datetime = DateTime::createFromFormat($from['localeFormat'], $datetime)->format('Y-m-d H:i:s');
}
$datetime = new DateTime($datetime, new DateTimeZone($from['olsonZone']));
$datetime->setTimeZone(new DateTimeZone($to['olsonZone']));
return $datetime->format($to['localeFormat']);
} catch (\Exception $e) {
return null;
}
}
용법:
$from = ['localeFormat' => "d/m/Y H:i A", 'olsonZone' => 'Asia/Calcutta'];
$to = ['localeFormat' => "Y-m-d H:i:s", 'olsonZone' => 'UTC'];
datetimeconv("14/05/1986 10:45 PM", $from, $to); // returns "1986-05-14 17:15:00"
사용자의 로컬 시스템에 설정된 시간대 의 UTC 시간 을 얻으려면 다음 단계를 따르십시오 (웹 응용 프로그램이 다른 시간대를 UTC에 저장하는 데 필요함).
자바 스크립트 (클라이언트 측) :
var dateVar = new Date();
var offset = dateVar.getTimezoneOffset();
//getTimezoneOffset - returns the timezone difference between UTC and Local Time
document.cookie = "offset="+offset;
PHP (서버 측) :
public function convert_utc_time($date)
{
$time_difference = isset($_COOKIE['offset'])?$_COOKIE['offset']:'';
if($time_difference != ''){
$time = strtotime($date);
$time = $time + ($time_difference*60); //minutes * 60 seconds
$date = date("Y-m-d H:i:s", $time);
} //on failure of js, default timezone is set as UTC below
return $date;
}
..
..
//in my function
$timezone = 'UTC';
$date = $this->convert_utc_time($post_date); //$post_date('Y-m-d H:i:s')
echo strtotime($date. ' '. $timezone)
Phill Pafford의 답변 에 대한 개선으로 (나는 그의 'Yd-mTG : i : sz'를 이해하지 못했고 그는 시간대를 되돌릴 것을 제안했습니다). 그래서 나는 이것을 제안합니다 (일반 / 텍스트로 HMTL 형식을 변경하여 복잡합니다 ...) :
<?php
header('content-type: text/plain;');
$my_timestamp = strtotime("2010-01-19 00:00:00");
// stores timezone
$my_timezone = date_default_timezone_get();
echo date(DATE_ATOM, $my_timestamp)."\t ($my_timezone date)\n";
// changes timezone
date_default_timezone_set("UTC");
echo date("Y-m-d\TH:i:s\Z", $my_timestamp)."\t\t (ISO8601 UTC date)\n";
echo date("Y-m-d H:i:s", $my_timestamp)."\t\t (your UTC date)\n";
// reverts change
date_default_timezone_set($my_timezone);
echo date(DATE_ATOM, $my_timestamp)."\t ($my_timezone date is back)\n";
?>
gmdate
기본 시간대를 UTC로 변경하는 대신 사용해야 합니다.gmdate
자동으로 UTC를 사용 하기 때문 입니다.