10/10/2018, 09:51

Cứu người ! Làm sao để lấy giờ GMT ?

Mình viết PHP, dùng hàm date để lấy thời gian server như sau:
$now = date("Y-m-d G:i:s");
sau đó insert vào database. Khi chạy trên localhost thì OK, vấn đề là khi mình đưa nó lên host ở Hàn Quốc thì nó lại lấy giờ bên Hàn Quốc insert vào database !!! (sớm hơn VN gần 2 giờ 10 phút). Bạn nào có thể giúp mình giải quyết vấn đề này ko ? Nếu được có thể viết 1 function dạng getGMT("+7") là lấy giờ VN....
Thanks
normal viết 11:52 ngày 10/10/2018
PHP Code:
<?php

function gmstrtotime($sgm) {
   
$months = array(
     
'Jan'=>1,
     
'Feb'=>2,
     
'Mar'=>3,
     
'Apr'=>4,
     
'May'=>5,
     
'Jun'=>6,
     
'Jul'=>7,
     
'Aug'=>8,
     
'Sep'=>9,
     
'Oct'=>10,
     
'Nov'=>11,
     
'Dec'=>12
   
);
   list(
$D$d$M$Y$H$i$s) = sscanf($sgm"%3s, %2d %3s %4d %2d:%2d:%2d GMT");
   return 
gmmktime($H$i$s$months***91;$M***93;, $d$Y);
}


$time time();
$us date("m/d/Y H:i:s",$time);
$sgm gmdate("D, d M Y H:i:s",$time) . " GMT";

$gmtime gmstrtotime($sgm);

echo 
$us "<BR>";
echo 
$sgm "<BR>";
echo 
$time "<BR>";
echo 
$gmtime "<BR>";

?>

02/13/2004 10:45:42
Fri, 13 Feb 2004 20:45:42 GMT
1076705142
1076705142
kết quả cho ra như sau:
02/13/2004 10:45:42
Fri, 13 Feb 2004 20:45:42 GMT
1076705142
1076705142
vikhoa viết 12:00 ngày 10/10/2018
Bạn làm thêm 1 biến $servertimezone nữa chẳng hạn. Biến này do bạn nhập vào, khi đặt server ở đâu, bạn nhập x vào $servertimezone (với x là giờ GMT+x của nơi đặt server). Như vậy, khi tính giờ GMT (tạm gọi là $gmt), bạn cứ trừ đi x giờ là xong cho dù server đặt tại đâu. ($gmt = $time - $servertimezone)

Còn nếu có cả members, cho members chọn múi giờ của mình (GMT+y) rồi bạn +y vào giờ hiện tại ($usertime=$gmt+y).

Tôi mới chỉ nghĩ ra cách này, không biết còn cách nào khác không?
harry4me viết 11:54 ngày 10/10/2018
Cám ơn các bạn đã trả lời ! Mình cũng đã tìm được cách giải quyết như sau:

function getGMT($formatstr,$GMT){
return gmdate($formatstr, time() + 3600*$GMT);
}

Muốn xài giờ VN (GMT+7) thì chỉ cần gọi: getGMT("Y-m-d G:i:s","+7");

Bạn nào bên Mỹ hay Tàu có thể test giùm mình được ko ? hihihi
phuongthom viết 11:52 ngày 10/10/2018
tùy mục đích của bạn, nếu chỉ cần lấy thời gian với mục đích đơn giản thì dùng hàm lấy thời gian

PHP Code:
function gettime()
{
$addh 2;
$addm 10;
return 
strtotime($addh." hours ".$addm." minutes");
// trả lại giá trị tg dạng unix

còn nếu muốn thời gian chuẩn để sử dụng rộng rãi, cho 1 source lớn thì phải chỉnh lại time zone cho source của bạn, rất đơn giản, chỉ cần thêm code
PHP Code:
date_default_timezone_set('Asia/Ho_Chi_Minh'); 
vào đầu file

sau đó chỉ việc dùng time(), date...bình thường, ko cần dùng hàm điều chỉnh thời gian nào khác

nghiên cứu thêm
http://php.net/manual/en/function.da...mezone-set.php
Bài liên quan
0