转换"简单"时区偏移(-7)到"完全"偏移量(-07:00)

时间:2017-03-08 04:38:33

标签: javascript date datetime momentjs

好吧,所以我现在已经试着打开和关闭了两个星期了,而且我很接近,但我只需要最后一次推动。我正在使用一个返回大量事件的API,所有事件都在不同的时区。 API简单地给了我-5-7等的偏移...我使用moment.js来解析时间和时区,然后返回用户时区中的事件只接受"完整"时区字符串,例如-07:00。所以我开始用以下方法操纵JS中的数据:

// number padding
  function pad(n) { 
      if (n < 10 & n >=0){
        return ("0" + n);
      } 
      if(n < 0 & n > -11){
        return ("-0" + Math.abs(n));
      }
      return n; 
    }

  var timedate = '2017/03/02 1:05',
      ampm = 'PM',
      zone = '-5',
      padded = pad(zone),
      adjustedZone = parseInt(padded).toFixed(2),
      adjustedTwo = adjustedZone.replace('.', ':');

这非常非常接近,但.toFixed除去我的前导零并简单地返回-5:00

如何在此方案中保留前导零?我还需要支持-10:00时区,也可能支持任何正时区,虽然我的目标用户是北美人,但是支持所有时区的GIANT加号。

非常感谢任何帮助,您还可以看到非常混乱的代码集here

2 个答案:

答案 0 :(得分:1)

注意:填充中-9不是-11,请参阅下面的代码&amp; 你非常接近,只需“填补所需输出的时间”(见下面的输出):

// number padding
  function pad(n) { 
      if (n < 10 & n >=0){
        return ("0" + n);
      }
      // NOTE: -9 not -11
      if(n < 0 & n >= -9){
        return ("-0" + Math.abs(n));
      }
      return n; 
    }

  var timedate = '2017/03/02 1:05',
      ampm = 'PM',
      zone = '-5',
      //padded = pad(zone),
      adjustedZone = parseInt(zone).toFixed(2),
      adjustedTwo = adjustedZone.replace('.', ':');
      
  //console.log(padded);
  console.log('adjustedZone: ' + adjustedZone);
  console.log('adjustedTwo:  ' + adjustedTwo);
  
  // pad the minutes of time for desired output
  var a = adjustedTwo.split(':');
  var output = pad(a[0]) + ':' + a[1];
  console.log('final output: ' + output);
  
  zone = '-10';
  a = parseInt(zone).toFixed(2).split('.');
  output = pad(a[0]) + ':' + a[1];
  console.log('final output (for zone = ' + zone + '): ' + output);

答案 1 :(得分:0)

为什么你不能在JS时使用COUNTRIES = { "CN": "CHINA", "US": "USA" }

utcOffset