簡體   English   中英

PHP 將UTC時間轉換為本地時間

[英]PHP convert UTC time to local time

我從我的服務器獲取如下格式的 UTC 時間,我的要求是將 UTC 時間轉換為本地時間。 因此,用戶可以根據他們的時區在瀏覽器上看到用戶友好的時間。 請幫我解決這個問題。 謝謝

$utc = "2014-05-29T04:54:30.934Z"

我嘗試了一些方法但對我的情況不起作用

第一的

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

第二

$time = strtotime($utc .' UTC');
$dateInLocal = date("Y-m-d H:i:s", $time);
echo $dateInLocal;

只需使用DateTimeZone ,例如

$dt = new DateTime($utc);
$tz = new DateTimeZone('Asia/Kolkata'); // or whatever zone you're after

$dt->setTimezone($tz);
echo $dt->format('Y-m-d H:i:s');

演示 ~ http://ideone.com/fkM4ct

您的代碼無法正常工作的原因很可能是因為您的服務器處於 UTC 時間。 所以服務器的本地時間UTC。

解決方案#1

一種可能的解決方案是執行以下服務器端並將紀元整數傳遞給瀏覽器:

$utc = "2014-05-29T04:54:30.934Z";
$time = strtotime($utc); //returns an integer epoch time: 1401339270

然后使用 JavaScript 將紀元整數轉換為用戶的本地時間(瀏覽器知道用戶的時區)。

解決方案#2

您可以讓瀏覽器向您發送用戶的時區。 然后您可以使用此信息來計算服務器端而不是瀏覽器端的日期字符串。 在此處查看更多信息: https : //stackoverflow.com/a/5607444/276949

這將為您提供用戶的偏移量(-7 小時)。 您可以通過查看此處使用此信息來設置時區: Convert UTC offset to timezone or date

如果這不是通過用戶配置文件設置完成的,使用 javascript 時間庫可能更容易和更簡單,例如。 moment.js ( http://momentjs.com/ ) 來解決這個問題(以 UTC 格式發送所有日期/時間,然后在客戶端進行轉換)。

Javascript 例如。 (我相信這可以在不創建兩個矩對象的情況下實現(在您閑暇時修復它)。

function utcToLocalTime(utcTimeString){
    var theTime  = moment.utc(utcTimeString).toDate(); // moment date object in local time
    var localTime = moment(theTime).format('YYYY-MM-DD HH:mm'); //format the moment time object to string

    return localTime;
}

用於服務器端解析的 php 示例(僅使用這些解決方案之一,兩者一起會在客戶端產生錯誤的時間)

/**
 * @param $dateTimeUTC
 * @param string $timeZone
 * @param string $dateFormat
 * @return string
 *
 * epoch to datetime (utc/gmt)::
 * gmdate('Y-m-d H:i:s', $epoch);
 */
function dateToTimezone($timeZone = 'UTC', $dateTimeUTC = null, $dateFormat = 'Y-m-d H:i:s'){

    $dateTimeUTC = $dateTimeUTC ? $dateTimeUTC : date("Y-m-d H:i:s");

    $date = new DateTime($dateTimeUTC, new DateTimeZone('UTC'));
    $date->setTimeZone(new DateTimeZone($timeZone));

    return $date->format($dateFormat);
}

使用函數date_default_timezone_set在那里你想要本地時間之后再次設置UTC Europe/Lisbon timezone List of Supported Timezones

  <?php

$utc = "2014-05-29T04:54:30.934Z";
$time = strtotime($utc);
echo "<br/>Defualt UTC/server time".$dateInLocal = date("Y-m-d H:i:s", $time);

//your local time zone put here
date_default_timezone_set('Asia/Kolkata');

echo "<br/>Local time". $dateInLocal = date("Y-m-d H:i:s", $time);
?>

只需將 UTC 時間發送到瀏覽器。 使用 JavaScript 用Date對象或moment.js解析它,然后將其輸出為文本。

通過在客戶端 JavaScript 中執行此操作,您無需知道用戶的時區。 瀏覽器將對此負責。

#cnvt_usrTime_to_UTC 0

function cnvt_usrTime_to_UTC($dt_start_time_formate,$UTC_TimeZone){

  $LocalTime_start_time = new DateTime( $dt_start_time_formate );
  $tz_start = new DateTimeZone( $UTC_TimeZone );
  $LocalTime_start_time->setTimezone( $tz_start );
  $array_start_time = (array) $LocalTime_start_time;

  return $UTC_Time_Start_Time = $array_start_time['date'];
}

調用函數 cnvt_usrTime_to_UTC($dt_start_time_formate,'UTC');

#cnvt_UTC_to_usrTime
function cnvt_UTC_to_usrTime($Date_Time,$User_time_Zone){

    date_default_timezone_set('UTC');

    $LocalTime_start_time = new DateTime( $Date_Time );
    $tz_start = new DateTimeZone( $User_time_Zone );
    $LocalTime_start_time->setTimezone( $tz_start );
    $start_date_time = (array) $LocalTime_start_time;

    return $StartDateTime = $start_date_time['date'];
}

調用函數

cnvt_UTC_to_usrTime($value_edit['dt_start_time'],Asia/Kolkata);

嘗試使用date_default_timezone_set()並根據時區設置日期

date_default_timezone_set('asia/kolkata');
$utc = "2014-05-29T04:54:30.934Z";
$time = strtotime($utc);
$dateInLocal = date("Y-m-d H:i:s", $time);
echo $dateInLocal;  //2014-05-29 10:24:30
echo '<br>';
date_default_timezone_set('America/Chicago'); 
$time = strtotime($utc .' UTC');
$dateInLocal = date("Y-m-d H:i:s", $time);
echo $dateInLocal; //2014-05-28 23:54:30 

 $savedtime = '2019-05-25 00:01:13'; //this is America/Chicago time $servertime = ini_get('date.timezone'); $time = strtotime($savedtime . $servertime); $dateInLocal = date("Ymd H:i:s", $time); echo $dateInLocal; display value according to local timezone 2019-05-25 10:31:13 // this is Asia/Kolkata time

$utc_date = '2021-10-07T11:01:07';
//local timezone or ant timezone you want
$timezone = 'America/Los_Angeles';
$timestamp = strtotime($utc_date);
$date = new DateTime();
$date->setTimestamp($timestamp);

$date->setTimezone(new \DateTimeZone($timezone));
echo $date->format('m-d-Y g:i A') . "\n";
protected function get_timemillizone_date($timezone_id)
{
    date_default_timezone_set($timezone_id);
    $availdate = date('Y-m-d');
    $stamp = strtotime($availdate); // get current date timestamp
    $currenttimemill = $stamp * 1000;
    return $currenttimemill;
}

$timezone_id = "Asia/Kolkata";
$DATA = $this->get_timemillizone_date($timezone_id);
echo $DATA;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM