Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Momentjs和时区-白天的小问题_Javascript_Angularjs_Timezone_Momentjs - Fatal编程技术网

Javascript Momentjs和时区-白天的小问题

Javascript Momentjs和时区-白天的小问题,javascript,angularjs,timezone,momentjs,Javascript,Angularjs,Timezone,Momentjs,我正在angular应用程序上写一个部分来选择一些时区(我不想使用库,因为我并不需要所有可能的区域,只需要基本的区域),因此我找到了一个区域列表,并创建了这个scope对象: $scope.timezones = [ {GMT: "-1200", label: "(GMT -12:00) Eniwetok, Kwajalein"}, {GMT: "-1100", label: "(GMT -11:00) Midway Island, Samoa"}, {GMT

我正在angular应用程序上写一个部分来选择一些时区(我不想使用库,因为我并不需要所有可能的区域,只需要基本的区域),因此我找到了一个区域列表,并创建了这个scope对象:

$scope.timezones = [
      {GMT: "-1200", label: "(GMT -12:00) Eniwetok, Kwajalein"},
      {GMT: "-1100", label: "(GMT -11:00) Midway Island, Samoa"},
      {GMT: "-1000", label: "(GMT -10:00) Hawaii"},
      {GMT: "-0900", label: "(GMT -9:00) Alaska"},
      {GMT: "-0800", label: "(GMT -8:00) Pacific Time (US & Canada)"},
      {GMT: "-0700", label: "(GMT -7:00) Mountain Time (US & Canada)"},
      {GMT: "-0600", label: "(GMT -6:00) Central Time (US & Canada), Mexico City"},
      {GMT: "-0500", label: "(GMT -5:00) Eastern Time (US & Canada), Bogota, Lima"},
      {GMT: "-0400", label: "(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz"},
      {GMT: "-0350", label: "(GMT -3:30) Newfoundland"},
      {GMT: "-0300", label: "(GMT -3:00) Brazil, Buenos Aires, Georgetown"},
      {GMT: "-0200", label: "(GMT -2:00) Mid-Atlantic"},
      {GMT: "-0100", label: "(GMT -1:00 hour) Azores, Cape Verde Islands"},
      {GMT: "0000", label: "(GMT) Western Europe Time, London, Lisbon, Casablanca"},
      {GMT: "+0100", label: "(GMT +1:00 hour) Brussels, Copenhagen, Madrid, Paris"},
      {GMT: "+0200", label: "(GMT +2:00) Kaliningrad, South Africa"},
      {GMT: "+0300", label: "(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburg"},
      {GMT: "+0350", label: "(GMT +3:30) Tehran"},
      {GMT: "+0400", label: "(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi"},
      {GMT: "+0450", label: "(GMT +4:30) Kabul"},
      {GMT: "+0500", label: "(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent"},
      {GMT: "+0550", label: "(GMT +5:30) Bombay, Calcutta, Madras, New Delhi"},
      {GMT: "+0575", label: "(GMT +5:45) Kathmandu"},
      {GMT: "+0600", label: "(GMT +6:00) Almaty, Dhaka, Colombo"},
      {GMT: "+0700", label: "(GMT +7:00) Bangkok, Hanoi, Jakarta"},
      {GMT: "+0800", label: "(GMT +8:00) Beijing, Perth, Singapore, Hong Kong"},
      {GMT: "+0900", label: "(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk"},
      {GMT: "+0950", label: "(GMT +9:30) Adelaide, Darwin"},
      {GMT: "+1000", label: "(GMT +10:00) Eastern Australia, Guam, Vladivostok"},
      {GMT: "+1100", label: "(GMT +11:00) Magadan, Solomon Islands, New Caledonia"},
      {GMT: "+1200", label: "(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka"}
    ]
然后,使用api调用返回的date对象,使用
momentjs.format()
剥离相关部分

我在本例中使用的日期对象如下所示:

var dateTime = "Tue Apr 25 2017 15:25:05 GMT+0100 (GMT Daylight Time)"
(GMT +1:00 hour) Brussels, Copenhagen, Madrid, Paris
然后我创建了更多的范围变量,如下所示:

$scope.Time = moment(dateTime).format("HH:mm")
$scope.Date = moment(dateTime).format("D/MM/YYYY")
$scope.Timezone = getTimezoneLabel(moment(dateTime).format("ZZ"))

getTimezoneLabel = function(timezone) {
  var result;
  result = null;
  angular.forEach($scope.timezones, function(t) {
    if (t.GMT === timezone) {
      return result = t.label;
    }
  });
  return result;
};
除了时区之外,页面上的结果几乎都是正确的。返回的时区如下所示:

var dateTime = "Tue Apr 25 2017 15:25:05 GMT+0100 (GMT Daylight Time)"
(GMT +1:00 hour) Brussels, Copenhagen, Madrid, Paris
但这是错误的!正确的答案应该是伦敦,但夏令时会干扰这一点

因此,我的想法是使用moment.format({我找不到适合这个}的格式)从何处获取括号中的值


有可能吗?你有更好的建议吗?谢谢

我是不是遗漏了什么?你给了布鲁斯时间,但为什么你希望伦敦成为时区?如果我没弄错的话,当夏令时,他们的时间变为+1,这意味着伦敦变为+1和Bruxels+2等等,但你的整个方法是有缺陷的。请阅读,特别是“时区!=偏移量”和“时区数据库”部分。阅读后,请让我知道您是否希望我在这里详细说明答案。这只是其他人的回应……我想知道是否有一个fixHi Nick。我帮助维护时刻和时刻时区,以及我链接到的标记wiki,因此它实际上是我的响应。你可能还想读我帮助策展的作品。没有“修复”,因为您的代码表示关于时区实际工作方式的多个逻辑错误。我能写的唯一答案是,一块一块地撕开你的代码,指出其中的缺陷——我认为这不是你想要的