2011-02-01 50 views
7

Làm cách nào để lấy ngày được lưu trữ, như 2011-01-30 18:23:49 và điều chỉnh múi giờ đó cho bất kỳ múi giờ đã chọn nào? Có một cách đơn giản như chỉ đơn giản là xác định múi giờ bằng cách viết tắt hoặc cộng/trừ x số giờ? Về cơ bản tôi muốn người dùng có thể chọn múi giờ của họ và ngày mặc định này được điều chỉnh để phù hợp với họ.điều chỉnh múi giờ

+1

thể trùng lặp của [Điều chỉnh múi giờ trong PHP với DateTime/DateTimeZone] (http://stackoverflow.com/questions/1445087/adjusting-time-zone-in-php-with-datetime-datetimezone) –

Trả lời

7
  1. Có người dùng chọn múi giờ của họ

  2. Sử dụng tên vùng hoặc bù đắp với date_default_timezone_set để thiết lập múi giờ mặc định được sử dụng trong hàm ngày tháng trong suốt phần còn lại của thi kịch bản.

  3. Sử dụng date('Z') để nhận được rằng múi giờ bù đắp từ giờ chỉ trong vài giây

  4. Chuyển đổi ngày lưu trữ của bạn đến một timestamp với strtotime - UNIX timestamps luôn GMT, vì vậy bây giờ bạn có thời gian trong giờ GMT.

  5. Thêm chênh lệch từ bước 3 để chuyển đổi thời gian đó thành múi giờ của người dùng.

  6. Sử dụng lại date để định dạng dấu thời gian dưới dạng chuỗi ở định dạng hiển thị mong muốn.

Ví dụ:

$user_timezone = 'America/Los_Angeles'; 
$stored_time = '2011-01-30 18:23:49'; 

date_default_timezone_set($user_timezone); 
$timestamp = strtotime($stored_time); 
$local_timestamp = $timestamp + date('Z'); 
$local_date = date('Y-m-d H:i:s', $local_timestamp); 

echo $local_date; 
0

Ở đây có giải pháp của tôi. Tôi đã thử nghiệm nó với America/Los_Angeles làm múi giờ của máy chủ và múi giờ của tôi với tư cách người dùng. Tôi giả sử rằng thời gian được lưu trữ bằng múi giờ của máy chủ.

<?php 
// My (user) timezone 
$user_timezone = 'Europe/Berlin'; 

// Server timezone 
$stored_timezone = 'America/Los_Angeles'; 

// Date/Time stored in your DB, using timezone of the server (yours, that is) 
$stored_datetime = '2011-01-29 22:40:00'; // this is the current time in L.A. 

// Setting default to servers timezone if not done before 
date_default_timezone_set($stored_timezone); 

// converting to unix timestamp 
$stored_timestamp = strtotime($stored_datetime); 

// setting default to users timezone 
date_default_timezone_set($user_timezone); 

// converting to timestamp 
$user_datetime = date('Y-m-d H:i:s', $stored_timestamp); 

// setting default back to servers timezone 
date_default_timezone_set($stored_timezone); 

echo $user_datetime; // output is my current time