Вы можете использовать geolocator.js для легкого получение часовой пояс и многое другое ...
В нем используются API Google, которые требуют ключ. Итак, сначала настроить Geolocator:
geolocator.config({
language: "en",
google: {
version: "3",
key: "YOUR-GOOGLE-API-KEY"
}
});
Получить TimeZone, если у вас есть координаты:
geolocator.getTimeZone(options, function (err, timezone) {
console.log(err || timezone);
});
Пример вывода:
{
id: "Europe/Paris",
name: "Central European Standard Time",
abbr: "CEST",
dstOffset: 0,
rawOffset: 3600,
timestamp: 1455733120
}
Locate затем получить TimeZone и многое другое
Если у вас нет координат, вы можете сначала найти позицию пользователя.
Пример, приведенный ниже, сначала попросит API-интерфейс HTML5 Geolocation для получения координат. Если он терпит неудачу или отклонен, он получит координаты через Geo-IP look-up. Наконец, он получит часовой пояс и многое другое ...
var options = {
enableHighAccuracy: true,
timeout: 6000,
maximumAge: 0,
desiredAccuracy: 30,
fallbackToIP: true, // if HTML5 fails or rejected
addressLookup: true, // this will get full address information
timezone: true,
map: "my-map" // this will even create a map for you
};
geolocator.locate(options, function (err, location) {
console.log(err || location);
});
Пример вывод:
{
coords: {
latitude: 37.4224764,
longitude: -122.0842499,
accuracy: 30,
altitude: null,
altitudeAccuracy: null,
heading: null,
speed: null
},
address: {
commonName: "",
street: "Amphitheatre Pkwy",
route: "Amphitheatre Pkwy",
streetNumber: "1600",
neighborhood: "",
town: "",
city: "Mountain View",
region: "Santa Clara County",
state: "California",
stateCode: "CA",
postalCode: "94043",
country: "United States",
countryCode: "US"
},
formattedAddress: "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
type: "ROOFTOP",
placeId: "ChIJ2eUgeAK6j4ARbn5u_wAGqWA",
timezone: {
id: "America/Los_Angeles",
name: "Pacific Standard Time",
abbr: "PST",
dstOffset: 0,
rawOffset: -28800
},
flag: "//cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.3.1/flags/4x3/us.svg",
map: {
element: HTMLElement,
instance: Object, // google.maps.Map
marker: Object, // google.maps.Marker
infoWindow: Object, // google.maps.InfoWindow
options: Object // map options
},
timestamp: 1456795956380
}
Одна вещь, которую я заметил, это отсутствие какого-либо требования к отметке времени UTC при определении часового пояса. Например, длинный/лат в Лондоне недостаточно для определения погоды, часовой пояс GMT или BST (британское летнее время/летнее время). Поэтому, конечно, для определения правильного часового пояса вам понадобятся lat, long и временная метка UTC. –
@MichaelWaterfall - Чтобы определить, находитесь ли вы в GMT (UTC + 0000) или BST (UTC + 0100) - да, вы абсолютно правы. Но это временные интервалы * смещения *, а не идентификаторы часовых поясов. Оба они покрываются одним и тем же идентификатором часового пояса «Европа/Лондон» в базе данных часовых поясов IANA. –
А в порядке, и смещение дневного света будет добавлено (если требуется) после рендеринга времени с заданным идентификатором часового пояса? –