获取一个国家的时区

时间:2019-01-02 13:30:36

标签: javascript django timezone

我有一个需要用户选择时区的表单。我有一个下拉菜单,可以选择他们所在的国家/地区,我希望能够填充该国家/地区的可能时区作为下拉菜单,供用户选择。

例如:用户选择墨西哥,我将时区显示为

'America/Mexico_City',
'America/Cancun',
'America/Merida',
'America/Monterrey',
'America/Matamoros',
'America/Mazatlan',
'America/Chihuahua',
'America/Ojinaga',
'America/Hermosillo',
'America/Tijuana',
'America/Santa_Isabel',
'America/Bahia_Banderas'

,用户将可以选择其中一个供我处理。做到这一点的最佳方法是什么?

我正在使用Django框架,并将使用js填充下拉列表。

1 个答案:

答案 0 :(得分:0)

在Python中,您可以使用the pytz library获取每个国家/地区代码的时区图:

>>> pytz.country_timezones
<pytz._CountryTimezoneDict at 0x7f0c3c215d68>

将其作为Python字典获取:

>>> dict(pytz.country_timezones)
{'AD': ['Europe/Andorra'],
 'AE': ['Asia/Dubai'],
 'AF': ['Asia/Kabul'],
 'AG': ['America/Antigua'],
 'AI': ['America/Anguilla'],
 'AL': ['Europe/Tirane'],
 'AM': ['Asia/Yerevan'],
 'AO': ['Africa/Luanda'],
 'AQ': ['Antarctica/McMurdo',
  'Antarctica/Casey',
  'Antarctica/Davis',
  'Antarctica/DumontDUrville',
  'Antarctica/Mawson',
  'Antarctica/Palmer',
  'Antarctica/Rothera',
  'Antarctica/Syowa',
  'Antarctica/Troll',
  'Antarctica/Vostok'],
 ...
 'YT': ['Indian/Mayotte'],
 'ZA': ['Africa/Johannesburg'],
 'ZM': ['Africa/Lusaka'],
 'ZW': ['Africa/Harare']}

然后,您可以对其进行JSON化并将其添加到Django模板中:

timezone_map = dict(pytz.country_timezones)
timezone_json = json.dumps(timezone_map)
# Add timezone_json to your view's template context

在JS端,您可以按照以下说明进行阅读以填充下拉列表:

let timezoneMap = {{ timezone_json }};
timezoneMap['MX']
// Returns ["America/Mexico_City", "America/Cancun", "America/Merida", "America/Monterrey", "America/Matamoros", "America/Mazatlan", "America/Chihuahua", "America/Ojinaga", "America/Hermosillo", "America/Tijuana", "America/Bahia_Banderas"]

如果您想从JS中获取此信息,并且不介意添加依赖项,我想说的是时区momment-timezone的momment.js扩展名可能您想要,但我自己从未使用过。