Hướng dẫn get timezone by ip address in php - lấy múi giờ theo địa chỉ ip trong php

Tôi muốn có múi giờ thông qua một địa chỉ IP trong PHP. Trên thực tế, tôi có một ứng dụng sẽ chạy tại máy khách. Tôi có địa chỉ IP của máy khách. Nhưng tôi không thể có được múi giờ cho mỗi máy khách.

Hướng dẫn get timezone by ip address in php - lấy múi giờ theo địa chỉ ip trong php

A_Arnold

2.61324 Huy hiệu bạc38 Huy hiệu đồng24 silver badges38 bronze badges

Hỏi ngày 13 tháng 4 năm 2009 lúc 10:06Apr 13, 2009 at 10:06

1

$ip = "189.240.194.147";  //$_SERVER['REMOTE_ADDR']
$ipInfo = file_get_contents('http://ip-api.com/json/' . $ip);
$ipInfo = json_decode($ipInfo);
$timezone = $ipInfo->timezone;
date_default_timezone_set($timezone);
echo date_default_timezone_get();
echo date('Y/m/d H:i:s');

Đôi khi nó sẽ không hoạt động trên máy chủ cục bộ, vì vậy hãy thử trên máy chủ.

Chỉnh sửa: Dữ liệu này đến từ IP-api.com, chúng miễn phí sử dụng miễn là bạn không vượt quá 45 yêu cầu mỗi phút và không sử dụng thương mại. Xem ĐKDV của họ, không phải là một trang dài.ip-api.com, they're free to use as long as you don't exceed 45 requests per minute and not using commercially. See their TOS, not a long a page.

Hướng dẫn get timezone by ip address in php - lấy múi giờ theo địa chỉ ip trong php

Anna

1894 Huy hiệu bạc17 Huy hiệu đồng4 silver badges17 bronze badges

Đã trả lời ngày 30 tháng 3 năm 2017 lúc 14:05Mar 30, 2017 at 14:05

Hướng dẫn get timezone by ip address in php - lấy múi giờ theo địa chỉ ip trong php

1

Địa chỉ IP thậm chí không thể dựa vào ánh xạ tới một quốc gia; Bạn đang giẫm lên băng mỏng nếu bạn cũng muốn có được múi giờ. Bạn nên yêu cầu khách hàng gửi cho bạn múi giờ, có lẽ trong một tiêu đề.

Xem Tor: Nặc danh trực tuyến vì một lý do khác để ngừng sử dụng địa chỉ IP cho những thứ họ không được thiết kế.

Đã trả lời ngày 13 tháng 4 năm 2009 lúc 10:52Apr 13, 2009 at 10:52

John Saundersjohn SaundersJohn Saunders

160K26 Huy hiệu vàng239 Huy hiệu bạc393 Huy hiệu Đồng26 gold badges239 silver badges393 bronze badges

6

Không có cách nào hoàn toàn chắc chắn để có được múi giờ của khách hàng, nhưng nếu bạn có khách hàng gửi ngày và thời gian từ máy của họ, bạn có thể tính toán nó dựa trên thời gian nó liên quan đến GMT. Vì vậy, nếu là 7:00 tối trên máy của họ và là 12:00 sáng GMT, thì bạn có thể xác định chúng là -5 từ GMT hoặc (EST/DST)

Đã trả lời ngày 13 tháng 4 năm 2009 lúc 10:30Apr 13, 2009 at 10:30

CGPCGPcgp

40.7K11 Huy hiệu vàng100 Huy hiệu bạc131 Huy hiệu Đồng11 gold badges100 silver badges131 bronze badges

3

Đó không phải là một ý tưởng tốt cho việc tìm kiếm múi giờ của người dùng thông qua địa chỉ IP của mình vì anh ta có thể truy cập vào tài khoản của mình từ những nơi khác nhau vào những thời điểm khác nhau. Vì vậy, không thể xác định vị trí múi giờ của mình thông qua địa chỉ IP. Nhưng tôi đã cố gắng tìm một giải pháp và tôi đang cung cấp mã của mình ở đây. Bất kỳ lời chỉ trích về kỹ thuật mã hóa sẽ được đánh giá cao.

getLocation();
                $tz_lat   = $location['latitude'];
                $tz_long  = $location['longitude'];

                $theta    = $cur_long - $tz_long;
                $distance = (sin(deg2rad($cur_lat)) * sin(deg2rad($tz_lat)))
                    + (cos(deg2rad($cur_lat)) * cos(deg2rad($tz_lat)) * cos(deg2rad($theta)));
                $distance = acos($distance);
                $distance = abs(rad2deg($distance));
                // echo '
'.$timezone_id.' '.$distance; if (!$time_zone || $tz_distance > $distance) { $time_zone = $timezone_id; $tz_distance = $distance; } } } return $time_zone; } return 'unknown'; }

Đã trả lời ngày 2 tháng 9 năm 2015 lúc 13:41Sep 2, 2015 at 13:41

Hướng dẫn get timezone by ip address in php - lấy múi giờ theo địa chỉ ip trong php

masud_monimasud_monimasud_moni

1.10517 huy hiệu bạc32 huy hiệu đồng17 silver badges32 bronze badges

Nó không thẳng về phía trước nhưng tôi có thời gian bao gồm cả việc tiết kiệm ánh sáng ban ngày từ 2 cuộc gọi API bằng JQuery và PHP. Tất cả có thể được thực hiện trong PHP khá dễ dàng với một chút thích ứng. Tôi chắc chắn rằng điều này cũng có thể được đặt ra khác nhau nhưng tôi chỉ lấy nó từ mã hiện tại phù hợp với nhu cầu của tôi vào thời điểm đó.

Jquery/php:

function get_user_time(){
    var server_time = ; //accuracy is not important it's just to let google know the time of year for daylight savings time
    $.ajax({
        url: "locate.php",
        dataType: "json",
        success: function(user_location) {
            if(user_location.statusCode=="OK"){
                $.ajax({
                    url: "https://maps.googleapis.com/maps/api/timezone/json?location="+user_location.latitude+","+user_location.longitude+"×tamp="+server_time+"&sensor=false",
                    dataType: "json",
                    success: function(user_time) {
                        if(user_time.statusCode=="error"){
                            //handle error
                        }else{
                            user_time.rawOffset /= 3600;
                            user_time.dstOffset /= 3600;
                            user_real_offset = user_time.rawOffset+user_time.dstOffset+user_time.utc;
                            //do something with user_real_offset
                        }
                    }
                });
            }
        }
    });
}

locate.php

function get_client_ip() {
    $ipaddress = '';
    if ($_SERVER['HTTP_CLIENT_IP'])
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if($_SERVER['HTTP_X_FORWARDED_FOR'])
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if($_SERVER['HTTP_X_FORWARDED'])
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if($_SERVER['HTTP_FORWARDED_FOR'])
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if($_SERVER['HTTP_FORWARDED'])
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if($_SERVER['REMOTE_ADDR'])
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';

    return $ipaddress;
}
$location = file_get_contents('http://api.ipinfodb.com/v3/ip-city/?key=xxxxxxxxx&ip='.get_client_ip().'&format=json');
$location = json_decode($location,true);
if(is_array($location)){
    date_default_timezone_set('UTC');
    $location['utc'] = time();
    echo json_encode($location);
}else{
    echo '{"statusCode":"error"}';
}

Đăng ký khóa miễn phí tại đây: http://ipinfodb.com/register.php (không có giới hạn nhưng xếp hàng nếu có hơn 1 yêu cầu mỗi giây)

Đã trả lời ngày 19 tháng 9 năm 2013 lúc 1:09Sep 19, 2013 at 1:09

Andy Geandy GeeAndy Gee

3.0452 Huy hiệu vàng26 Huy hiệu bạc41 Huy hiệu đồng2 gold badges26 silver badges41 bronze badges

Nếu những gì bạn cần biết là múi giờ của người dùng duyệt web của bạn, thì bạn có thể sử dụng một số dịch vụ như IP2Location để đoán múi giờ. Tuy nhiên, hãy nhớ rằng, như Altcognito đã nói, đây không phải là một cách chính xác 100% để nói với múi giờ của khách hàng. Có một số vấn đề chính xác với phương pháp này.

Dudewad

12.3k5 Huy hiệu vàng34 Huy hiệu bạc46 Huy hiệu đồng5 gold badges34 silver badges46 bronze badges

Đã trả lời ngày 13 tháng 4 năm 2009 lúc 10:54Apr 13, 2009 at 10:54

Pablo Santa Cruzpablo Santa CruzPablo Santa Cruz

172K32 Huy hiệu vàng238 Huy hiệu bạc290 Huy hiệu Đồng32 gold badges238 silver badges290 bronze badges

Kiểm tra cơ sở dữ liệu MaxMind Geolite2. Nó chứa các chi tiết về lục địa/quốc gia/thành phố và lat/lon cho hầu hết các địa chỉ IP bao gồm cả thời gian_zone như bạn có thể thấy bên dưới.time_zone as you can see below.

Tôi mô tả cách biên dịch tiện ích mở rộng PHP và cách sử dụng cơ sở dữ liệu MMDB trong PHP tại đây:

Giới thiệu về MaxMind Geolite2 với Kohana PHP

Hướng dẫn get timezone by ip address in php - lấy múi giờ theo địa chỉ ip trong php

Đã trả lời ngày 10 tháng 3 năm 2014 lúc 21:53Mar 10, 2014 at 21:53

JamiejamieJamie

8129 Huy hiệu bạc13 Huy hiệu đồng9 silver badges13 bronze badges

Dưới đây là một ví dụ sử dụng API vị trí ánh xạ địa chỉ IP tới múi giờ, ví dụ: Gửi yêu cầu đến https://ipapi.co//timezone/ và lấy lại thời gian cho địa chỉ IP đó.

Mã PHP

file_get_contents('https://ipapi.co/1.2.3.4/timezone/');

Độ chính xác không phải là 100% như những người khác đã nói.

Đã trả lời ngày 20 tháng 3 năm 2017 lúc 13:54Mar 20, 2017 at 13:54

Người dùnguser

17.2K20 Huy hiệu vàng94 Huy hiệu bạc118 Huy hiệu đồng20 gold badges94 silver badges118 bronze badges

Làm thế nào để có được múi giờ của người dùng trong PHP?

Phát hiện timezoone của người dùng là một quá trình hai bước: nhận phần bù múi giờ của trình duyệt với JavaScript và gửi nó đến PHP (thông qua AJAX hoặc một cái gì đó).Chuyển đổi phần bù múi giờ thành tên múi giờ cơ sở dữ liệu TZ hợp lệ như America/New_York, Asia/Kolkata.Get the timezone offset of the browser with Javascript, and sent it to PHP (via AJAX or something). Convert the timezone offset to a valid TZ Database timezone name such as America/New_York, Asia/Kolkata.

Làm cách nào để có được múi giờ máy chủ ở Laravel?

Laravel có một múi giờ mặc định được đặt thành UTC ...
Thay đổi múi giờ.Có hai cách chính để thay đổi múi giờ ..
Tùy chọn 1. Từ thư mục gốc dự án của bạn, hãy mở thư mục cấu hình.Chỉnh sửa ứng dụng.....
Tùy chọn 2. Thực hiện sửa đổi trong tệp .ENV để chỉ định múi giờ như sau: app_timezone = 'Asia/singapore'.