Bất cứ ai cũng có thể đề xuất một phương pháp dễ dàng để chuyển đổi ngày và giờ thành các múi giờ khác nhau trong php?Chuyển đổi múi giờ trong php
Trả lời
Bạn có thể sử dụng đối tượng datetime hoặc bí danh chức năng của họ cho việc này:
Example (abridged from PHP Manual)
date_default_timezone_set('Europe/London');
$datetime = new DateTime('2008-08-03 12:35:23');
echo $datetime->format('Y-m-d H:i:s') . "\n";
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo $datetime->format('Y-m-d H:i:s');
Chỉnh sửa về ý kiến
nhưng tôi cannt sử dụng phương pháp này vì tôi cần hiển thị ngày ở các múi giờ khác nhau như chúng tôi đăng nhập er từ các vị trí khác nhau
Đó không phải là vấn đề. Khi người dùng đăng nhập, bạn xác định múi giờ của mình và đặt múi giờ đó thành đối tượng DateTime của bạn giống như được hiển thị. Tôi đang sử dụng một cách tiếp cận tương tự trong một trong các dự án của tôi và nó hoạt động như một sự quyến rũ.
trong cơ sở dữ liệu tôi cần để có được những ngày tháng trong bất kỳ múi giờ duy nhất, sau đó chỉ có thể được xử lý đúng cách
Bạn lưu trữ thời gian hoặc là một dấu thời gian hoặc một datetime trong một múi giờ. Khi bạn truy vấn trường DateTime, bạn chuyển đổi thời gian trong đối tượng DateTime thành múi giờ này hoặc - nếu db của bạn hỗ trợ nó - truy vấn với múi giờ đã chọn.
Một phương pháp đơn giản hơn thậm chí trông như thế này:
date_default_timezone_set('Europe/London'); // your user's timezone
$my_datetime='2013-10-23 15:47:10';
echo date('Y-m-d H:i:s',strtotime("$my_datetime UTC"));
Như đã trình bày in the PHP manual, strtotime() chấp nhận một múi giờ cũng vậy, bạn chỉ cần thêm nó vào datetime của bạn.
Tôi khuyên bạn nên lưu trữ tất cả thời gian biểu của bạn bằng UTC vì cách đó bạn sẽ không gặp vấn đề với tiết kiệm ban ngày.
Điều này phù hợp với tôi và nó cũng khá sạch sẽ!
function convert_to_user_date($date, $format = 'n/j/Y g:i A', $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC')
{
try {
$dateTime = new DateTime ($date, new DateTimeZone($serverTimeZone));
$dateTime->setTimezone(new DateTimeZone($userTimeZone));
return $dateTime->format($format);
} catch (Exception $e) {
return '';
}
}
function convert_to_server_date($date, $format = 'n/j/Y g:i A', $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC')
{
try {
$dateTime = new DateTime ($date, new DateTimeZone($userTimeZone));
$dateTime->setTimezone(new DateTimeZone($serverTimeZone));
return $dateTime->format($format);
} catch (Exception $e) {
return '';
}
}
//example usage
$serverDate = $userDate = '2014-09-04 22:37:22';
echo convert_to_user_date($serverDate);
echo convert_to_server_date($userDate);
DateTime::setTimezone -- date_timezone_set — Sets the time zone for the DateTime object
hướng đối tượng phong cách
<?php
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";
?>
phong cách thủ tục
<?php
$date = date_create('2000-01-01', timezone_open('Pacific/Nauru'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
date_timezone_set($date, timezone_open('Pacific/Chatham'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
?>
Những ví dụ trên sẽ ra:
2000-01-01 00:00:00+12:00
2000-01-01 01:45:00+13:45
<?php
$time='6:02';
$dt = new DateTime($time, new DateTimeZone('America/New_York'));
//echo $dt->format('Y-m-d H:i:s') . PHP_EOL;
$dt->setTimezone(new DateTimeZone('Asia/Kolkata'));
echo $dt->format('H:i') . PHP_EOL;
?>
// Chuyển đổi ngày từ vùng này sang vùng khác .. /* $ zone_from = 'Asia/Kolkata';
$zone_to='America/Phoenix';
date_default_timezone_set($zone_from);
$convert_date="2016-02-26 10:35:00";
echo $finalDate=zone_conversion_date($convert_date, $zone_from, $zone_to);
*/
function zone_conversion_date($time, $cur_zone, $req_zone)
{
date_default_timezone_set("GMT");
$gmt = date("Y-m-d H:i:s");
date_default_timezone_set($cur_zone);
$local = date("Y-m-d H:i:s");
date_default_timezone_set($req_zone);
$required = date("Y-m-d H:i:s");
/* return $required; */
$diff1 = (strtotime($gmt) - strtotime($local));
$diff2 = (strtotime($required) - strtotime($gmt));
$date = new DateTime($time);
$date->modify("+$diff1 seconds");
$date->modify("+$diff2 seconds");
return $timestamp = $date->format("Y-m-d H:i:s");
}
UTC tới địa phương:
<?php
$datetime = date("Y-m-d H:i:s");
$utc = new DateTime($datetime, new DateTimeZone('UTC'));
$utc->setTimezone(new DateTimeZone('America/Sao_Paulo'));
echo $utc->format('Y-m-d H:i:s');
?>
Không ai trong số những câu trả lời làm việc cho tôi (tôi bỏ qua cố gắng mã mà là quá cồng kềnh trong kích thước). Tôi cũng nghĩ rằng thật kỳ lạ khi thay đổi múi giờ mặc định chỉ cho một chuyển đổi.
Đây là giải pháp của tôi:
function changeTimeZone($dateString, $timeZoneSource = null, $timeZoneTarget = null)
{
if (empty($timeZoneSource)) {
$timeZoneSource = date_default_timezone_get();
}
if (empty($timeZoneTarget)) {
$timeZoneTarget = date_default_timezone_get();
}
$dt = new DateTime($dateString, new DateTimeZone($timeZoneSource));
$dt->setTimezone(new DateTimeZone($timeZoneTarget));
return $dt->format("Y-m-d H:i:s");
}
Vì vậy, để chuyển sang mặc định máy chủ, bạn sẽ chỉ cần vượt qua một múi giờ:
changeTimeZone("2016-10-24 16:28", "Asia/Tokyo");
Để chuyển đổi từ mặc định máy chủ cho người dùng, bạn sẽ để tham số thứ 2 null hoặc trống:
changeTimeZone("2016-10-24 16:28", "", "Asia/Tokyo");
Và để chuyển giữa các múi giờ lated để mặc định, bạn sẽ cung cấp 2 múi giờ:
changeTimeZone("2016-10-24 16:28", "America/New_York", "Asia/Tokyo");
Dường như làm việc tuyệt vời! –
Câu trả lời hay. Tôi thích thử bắt thay vì là (trống) để tránh bất kỳ lỗi chính tả trong chuỗi múi giờ. hãy thử { DateTimeZone mới ($ timeZoneSource); } \t bắt (Ngoại lệ $ e) { $ timeZoneSource = date_default_timezone_get(); } –
- 1. Chuyển đổi thời gian và ngày tháng từ múi giờ này sang múi giờ khác trong PHP
- 2. Chuyển đổi múi giờ của Python
- 3. Cách chuyển đổi ngày giờ từ múi giờ này sang múi giờ khác
- 4. chuyển đổi múi giờ và múi giờ với pytz - hành vi thổi tâm trí
- 5. iOS: chuyển đổi múi giờ UTC vào điện thoại múi giờ địa phương
- 6. Làm thế nào để bạn chuyển đổi ngày/giờ từ một múi giờ này sang múi giờ khác trong R?
- 7. Thay đổi múi giờ trong Arshaw FullCalendar
- 8. Cấu hình múi giờ mặc định PHP
- 9. Cách chuyển đổi thời gian chính xác theo múi giờ?
- 10. Mysql chuyển đổi TIMESTAMP thành INTEGER - múi giờ
- 11. Thay đổi múi giờ trong Tomcat
- 12. Thay đổi múi giờ trong MSYS
- 13. Chuyển đổi các ngày JSON không có múi giờ
- 14. PHP & MySQL: Chuyển đổi TIMESTAMP được lưu trữ thành múi giờ địa phương của người dùng
- 15. Chuyển đổi UTC DateTime thành múi giờ khác
- 16. Chuyển đổi ngày thành múi giờ khác nhau
- 17. Chuyển đổi Olson TZID thành múi giờ của Windows
- 18. Chuyển chuỗi thành ngày có múi giờ
- 19. PHP - strtotime, chỉ định múi giờ
- 20. Chuyển đổi ngày giờ sang một số múi giờ khác trong java
- 21. Làm thế nào để chuyển đổi một ngày giờ thành múi giờ cụ thể trong C#?
- 22. Lấy ngày giờ chuyển đổi tiết kiệm ánh sáng cho các múi giờ trong Java
- 23. Điều chỉnh múi giờ trong PHP với DateTime/DateTimeZone
- 24. get thời gian máy chủ trong php - múi giờ hành
- 25. MYSQL thiết lập múi giờ trong mã PHP
- 26. Làm thế nào tôi có thể chuyển đổi múi giờ của windows thành múi giờ mà pytz hiểu được?
- 27. Python pytz Chuyển đổi dấu thời gian (định dạng chuỗi) từ một múi giờ sang một múi giờ khác
- 28. Có plugin JQuery nào để chuyển đổi múi giờ UTC thành múi giờ của người dùng cục bộ không?
- 29. Thay đổi múi giờ của Nga
- 30. Quốc gia vào múi giờ trong PHP/Zend Framework
nhờ Gordon nhưng tôi cannt sử dụng phương pháp này bởi vì tôi cần phải hiển thị ngày trong múi giờ khác nhau như người dùng đăng nhập từ các địa điểm khác nhau – raki
@raki: vì vậy chỉ cần sau khi người dùng được đăng nhập - thiết lập date_default_timezone_set() với múi giờ đã chọn của người dùng thích hợp. – zerkms
cũng không thể .. bởi vì .. trong cơ sở dữ liệu tôi cần để có được ngày trong bất kỳ múi giờ duy nhất, sau đó chỉ có nó có thể được xử lý đúng cách – raki