Как получить местный часовой пояс в полной форме, используя момент-часовой пояс? - PullRequest
0 голосов
/ 25 апреля 2018

Мне нужно узнать текущий часовой пояс, как это получить?

Я использовал

moment.tz.guess(); // It gives "Asia/Calcutta"

Но мне нужно India Standard Time

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

var abbrs = {
    EST : 'Eastern Standard Time',
    EDT : 'Eastern Daylight Time',
    CST : 'Central Standard Time',
    CDT : 'Central Daylight Time',
    MST : 'Mountain Standard Time',
    MDT : 'Mountain Daylight Time',
    PST : 'Pacific Standard Time',
    PDT : 'Pacific Daylight Time',
    IST : 'Indian Standard Time'
};

moment.fn.zoneName = function () {
    var abbr = this.zoneAbbr();
    return abbrs[abbr] || abbr;
};

var zone_name =  moment.tz.guess();
var timezone = moment.tz(zone_name).zoneName()
console.log(timezone);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.16/moment-timezone.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.16/moment-timezone-with-data.js"></script>

Вам необходимо определить все полное имя для сокращений.Для получения дополнительной информации о форматировании проверьте doc .

0 голосов
/ 26 апреля 2018

Используя moment.tz.guess(); вы получаете только zone name, но вы ищете abbreviation из timezone.

Для этого вам нужно использовать zoneAbbr () и найти его в созданном вами объекте abbrs , поскольку момент-часовой пояс не обеспечивает этого, как указано ниже в официальной документации:

Moment.js также предоставляет хук для полного имени часового пояса формы. Поскольку эти строки обычно локализованы, Часовой пояс момента делает не предоставлять длинных имен для зон .

Проверьте здесь в документации для получения дополнительной информации.

Ниже приведен рабочий фрагмент кода для лучшего понимания:

var zoneName = moment.tz.guess();
console.log(zoneName); // zone name

var timeZoneAbbreviation = moment.tz(zoneName).zoneAbbr()
console.log(timeZoneAbbreviation); // zone abbreviation

var abbrs = {
  EST: 'Eastern Standard Time',
  EDT: 'Eastern Daylight Time',
  CST: 'Central Standard Time',
  CDT: 'Central Daylight Time',
  MST: 'Mountain Standard Time',
  MDT: 'Mountain Daylight Time',
  PST: 'Pacific Standard Time',
  PDT: 'Pacific Daylight Time',
  IST: 'Indian Standard Time',
  JST: 'Japan Standard Time'
};

// using pure JavaScript
var val;
Object.keys(abbrs).forEach(function(timeZoneAbbreviation) {
  val = abbrs[timeZoneAbbreviation];
});
console.log(val); // your expected result


// using lodash.js library
var getKey = function(obj, value) {
  return _.get(obj, value, false);
};

console.log(getKey(abbrs, timeZoneAbbreviation)); // your expected result
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.11/moment-timezone-with-data.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
...