How to get a time zone from a location using latitude and longitude coordinates?

后端 未结 17 1643
走了就别回头了
走了就别回头了 2020-11-21 04:38

Given the latitude and longitude of a location, how does one know what time zone is in effect in that location?

In most cases, we are looking for an IANA/Olson time z

17条回答
  •  猫巷女王i
    2020-11-21 05:00

      function jsonpRequest(url, data)
    {
        let params = "";
        for (let key in data)
        {
            if (data.hasOwnProperty(key))
            {
                if (params.length == 0)
                {
                    params += "?";
                }
                else
                {
                    params += "&";
                }
                let encodedKey = encodeURIComponent(key);
                let encodedValue = encodeURIComponent(data[key]);
                params += encodedKey + "=" + encodedValue;
             }
        }
        let script = document.createElement('script');
        script.src = url + params;
        document.body.appendChild(script);
    }
    
    function getLocation() {
      if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
      } else {
        x.innerHTML = "Geolocation is not supported by this browser.";
      }
    }
    let lat_ini=[]; let lon_ini=[];
    function showPosition(position) {
      lat_ini= position.coords.latitude;
      lon_ini= position.coords.longitude;
    }
    ////delay time between lines
    function sleep(ms) {
      return new Promise(resolve => setTimeout(resolve, ms));
    }
    ///////
    function getGMT()
    {
      getfinalGMT()
      getLocation()
      async function sample() {
        await sleep(2000);
    let lat_str=lat_ini.toString();
    let lng_str=" "+lon_ini.toString();
    
      let url = "https://api.opencagedata.com/geocode/v1/json";
      let data = {
        callback: "displayGMT",
        q: lat_str + lng_str,
        key: "fac4471073a347019196c1291e6a97d7"
      }
      jsonpRequest(url, data)
    }
     sample();
     }
    let your_GMT=[];
    function displayGMT(data)
    {
    your_GMT=(Number(data.results[0].annotations.timezone.offset_string))
    console.log(your_GMT)
    }
    /////
    function getfinalGMT()
    {
    let lat=document.getElementById("lat_id").value; let lng=document.getElementById("lng_id").value;
    let lat_str=lat.toString();
    let lng_str=" "+lng.toString();
    
      let url = "https://api.opencagedata.com/geocode/v1/json";
      let data = {
        callback: "displayfinalGMT",
        q: lat + lng_str,
        key: "fac4471073a347019196c1291e6a97d7"
      }
      jsonpRequest(url, data)
     }
    let final_GMT=[];
    function displayfinalGMT(data)
    {
    final_GMT=(Number(data.results[0].annotations.timezone.offset_string))
    console.log(final_GMT)
    }
    /////clock
    
    
    const hourHand = document.querySelector('[data-hour-hand]')
    const minuteHand = document.querySelector('[data-minute-hand]')
    const secondHand = document.querySelector('[data-second-hand]')
      let dif_overall=[];
    function setClock() {
       let gmt_diff=Number(your_GMT-final_GMT)/100
       if (gmt_diff>12){
          dif_overall=gmt_diff-12
       }
       else{
         dif_overall=gmt_diff
       }
        console.log(dif_overall)
      const currentDate = new Date()
      const secondsRatio = currentDate.getSeconds() / 60
      const minutesRatio = (secondsRatio + currentDate.getMinutes()) / 60
      const hoursRatio = (minutesRatio + currentDate.getHours() - dif_overall ) / 12
      setRotation(secondHand, secondsRatio)
      setRotation(minuteHand, minutesRatio)
      setRotation(hourHand, hoursRatio)
    }
    
    function setRotation(element, rotationRatio) {
      element.style.setProperty('--rotation', rotationRatio * 360)
    }
    function activate_clock(){
    setClock()
    setInterval(setClock, 1000)
    }
    *, *::after, *::before {
      box-sizing: border-box;
    }
    
    body {
      background: linear-gradient(to right, hsl(200, 100%, 50%), hsl(175, 100%, 50%));
      display: flex;
      justify-content: center;
      align-items: center;
      min-height: 100vh;
      overflow: hidden;
    }
    
    .clock {
      width: 200px;
      height: 200px;
      background-color: rgba(255, 255, 255, .8);
      border-radius: 50%;
      border: 2px solid black;
      position: relative;
    }
    
    .clock .number {
      --rotation: 0;
      position: absolute;
      width: 100%;
      height: 100%;
      text-align: center;
      transform: rotate(var(--rotation));
      font-size: 1.5rem;
    }
    
    .clock .number1 { --rotation: 30deg; }
    .clock .number2 { --rotation: 60deg; }
    .clock .number3 { --rotation: 90deg; }
    .clock .number4 { --rotation: 120deg; }
    .clock .number5 { --rotation: 150deg; }
    .clock .number6 { --rotation: 180deg; }
    .clock .number7 { --rotation: 210deg; }
    .clock .number8 { --rotation: 240deg; }
    .clock .number9 { --rotation: 270deg; }
    .clock .number10 { --rotation: 300deg; }
    .clock .number11 { --rotation: 330deg; }
    
    .clock .hand {
      --rotation: 0;
      position: absolute;
      bottom: 50%;
      left: 50%;
      border: 1px solid white;
      border-top-left-radius: 10px;
      border-top-right-radius: 10px;
      transform-origin: bottom;
      z-index: 10;
      transform: translateX(-50%) rotate(calc(var(--rotation) * 1deg));
    }
    
    .clock::after {
      content: '';
      position: absolute;
      background-color: black;
      z-index: 11;
      width: 15px;
      height: 15px;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      border-radius: 50%;
    }
    
    .clock .hand.second {
      width: 3px;
      height: 45%;
      background-color: red;
    }
    
    .clock .hand.minute {
      width: 7px;
      height: 40%;
      background-color: black;
    }
    
    .clock .hand.hour {
      width: 10px;
      height: 35%;
      background-color: black;
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    /* Background Styles Only */
    
    @import url('https://fonts.googleapis.com/css?family=Raleway');
    
    * {
        font-family: Raleway;
    }
    
    .side-links {
      position: absolute;
      top: 15px;
      right: 15px;
    }
    
    .side-link {
      display: flex;
      align-items: center;
      justify-content: center;
      text-decoration: none;
      margin-bottom: 10px;
      color: white;
      width: 180px;
      padding: 10px 0;
      border-radius: 10px;
    }
    
    .side-link-youtube {
      background-color: red;
    }
    
    .side-link-twitter {
      background-color: #1DA1F2;
    }
    
    .side-link-github {
      background-color: #6e5494;
    }
    
    .side-link-text {
      margin-left: 10px;
      font-size: 18px;
    }
    
    .side-link-icon {
      color: white;
      font-size: 30px;
    }
       



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

提交回复
热议问题