如何对时刻时区列表进行排序?

Ash*_*hik 2 javascript datetime momentjs moment-timezone

我想在下拉菜单中按升序显示时刻时区列表。默认情况下,它们按字母顺序排序。但是,我的要求是按 GMT 升序对它们进行排序。

疼痛前:

[
  '(GMT+00:00) Africa/Abidjan',
  '(GMT+00:00) Africa/Accra',
  '(GMT+03:00) Africa/Addis_Ababa',
  '(GMT+01:00) Africa/Algiers',
  '(GMT+03:00) Africa/Asmara',
  '(GMT+03:00) Africa/Asmera',
  '(GMT+00:00) Africa/Bamako',
  '(GMT+01:00) Africa/Bangui',
]
Run Code Online (Sandbox Code Playgroud)

排序后:

[
  '(GMT+00:00) Africa/Abidjan',
  '(GMT+00:00) Africa/Accra',
  '(GMT+00:00) Africa/Bamako',
  '(GMT+01:00) Africa/Algiers',
  '(GMT+01:00) Africa/Bangui',
  '(GMT+03:00) Africa/Addis_Ababa',
  '(GMT+03:00) Africa/Asmera',
  '(GMT+03:00) Africa/Asmara',
]

Run Code Online (Sandbox Code Playgroud)

mpl*_*jan 5

比你的短,阿希克。无需从数组访问时区两次

const getTimeZoneList = moment.tz.names()
  .map(t => `(GMT${moment.tz(t).format("Z")}) ${t}`);
const sortByZone = (a,b) => { 
  let [ahh,amm] = a.split("GMT")[1].split(")")[0].split(":"); 
  let [bhh,bmm] = b.split("GMT")[1].split(")")[0].split(":");
  return (+ahh*60+amm) - (+bhh*60+bmm)
};
console.log(getTimeZoneList.sort(sortByZone))
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.27/moment-timezone-with-data-2012-2022.min.js"></script>
Run Code Online (Sandbox Code Playgroud)