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.
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['//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.
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
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.
; //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: "//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['//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: //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
Đã 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 //ipapi.co//timezone/
và lấy lại thời gian cho địa chỉ IP đó.
Mã PHP
file_get_contents['//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