Javascript 如何对时刻时区列表进行排序?
我想在下拉菜单中按升序显示时刻时区列表。默认情况下,它们按字母顺序排序。但是,我的要求是按照GMT的升序对它们进行排序 分拣前:Javascript 如何对时刻时区列表进行排序?,javascript,datetime,momentjs,moment-timezone,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/
[
'(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',
]
排序后:
[
'(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',
]
通过执行此操作,可以获得已排序的列表
const timeZones=moment.tz.names();
常量getTimeZoneList=()=>
时区地图(
(t,i)=>`(GMT${moment.tz(timeZones[i]).format(“Z”)})${timeZones[i]}`
);
常量sortByGmt=()=>{
const timeZone=getTimeZoneList();
返回时区。排序((a,b)=>{
常数re=/^\(GMT([+-]\d{1,2}):(\d{1,2}).$/;
const aOffset=parseFloat(a.replace(re,“$1.$2”));
const bOffset=parseFloat(b.replace(re,“$1.$2”));
返回aOffsetbOffset-1:0;
});
};
console.log(sortByGmt())
通过执行此操作,您可以获得已排序的列表
const timeZones=moment.tz.names();
常量getTimeZoneList=()=>
时区地图(
(t,i)=>`(GMT${moment.tz(timeZones[i]).format(“Z”)})${timeZones[i]}`
);
常量sortByGmt=()=>{
const timeZone=getTimeZoneList();
返回时区。排序((a,b)=>{
常数re=/^\(GMT([+-]\d{1,2}):(\d{1,2}).$/;
const aOffset=parseFloat(a.replace(re,“$1.$2”));
const bOffset=parseFloat(b.replace(re,“$1.$2”));
返回aOffsetbOffset-1:0;
});
};
console.log(sortByGmt())
比你的短,Ashik。无需从阵列访问时区两次
const getTimeZoneList=moment.tz.names()
.map(t=>`(GMT${moment.tz(t).format(“Z”)})${t}`);
常数sortByZone=(a,b)=>{
设[ahh,amm]=a.split(“GMT”)[1]。split(“)”[0]。split(“:”;
设[bhh,bmm]=b.split(“GMT”)[1]。split(“)”[0]。split(“:”;
返回(+ahh*60+amm)-(+bhh*60+bmm)
};
console.log(getTimeZoneList.sort(sortByZone))
比你的短,Ashik。无需从阵列访问时区两次
const getTimeZoneList=moment.tz.names()
.map(t=>`(GMT${moment.tz(t).format(“Z”)})${t}`);
常数sortByZone=(a,b)=>{
设[ahh,amm]=a.split(“GMT”)[1]。split(“)”[0]。split(“:”;
设[bhh,bmm]=b.split(“GMT”)[1]。split(“)”[0]。split(“:”;
返回(+ahh*60+amm)-(+bhh*60+bmm)
};
console.log(getTimeZoneList.sort(sortByZone))
如果我们有对象的矩.js时区数组(名称、值)或任何其他带有GMT值的对象时区数组,并且我们希望对GMT值对其应用排序,则此情况的解决方案。
然后我们可以按
timezones.sort( this.compare );
compare( a, b ) {
var first = a.name.substring(a.name.indexOf('T')+1,a.name.indexOf(")"));
first.replace(/^"+:"+$/g, '');
var second = b.name.substring(b.name.indexOf('T')+1,b.name.indexOf(")"));
first.replace(/^"+:"+$/g, '');
if ( parseFloat(first) < parseFloat(second) ){
return -1;
}
if ( parseFloat(first) > parseFloat(second) ){
return 1;
}
return 0;
}
timezones.sort(this.compare);
比较(a,b){
var first=a.name.substring(a.name.indexOf('T')+1,a.name.indexOf(“)”);
首先,替换(/^“+:”+/$/g,”);
var second=b.name.substring(b.name.indexOf('T')+1,b.name.indexOf(“)”);
首先,替换(/^“+:”+/$/g,”);
if(parseFloat(第一)parseFloat(第二)){
返回1;
}
返回0;
}
如果我们有对象的矩.js时区数组(名称、值)或任何其他带有GMT值的对象时区数组,并且我们希望对GMT值对其应用排序,则此情况的解决方案。
然后我们可以按
timezones.sort( this.compare );
compare( a, b ) {
var first = a.name.substring(a.name.indexOf('T')+1,a.name.indexOf(")"));
first.replace(/^"+:"+$/g, '');
var second = b.name.substring(b.name.indexOf('T')+1,b.name.indexOf(")"));
first.replace(/^"+:"+$/g, '');
if ( parseFloat(first) < parseFloat(second) ){
return -1;
}
if ( parseFloat(first) > parseFloat(second) ){
return 1;
}
return 0;
}
timezones.sort(this.compare);
比较(a,b){
var first=a.name.substring(a.name.indexOf('T')+1,a.name.indexOf(“)”);
首先,替换(/^“+:”+/$/g,”);
var second=b.name.substring(b.name.indexOf('T')+1,b.name.indexOf(“)”);
首先,替换(/^“+:”+/$/g,”);
if(parseFloat(第一)parseFloat(第二)){
返回1;
}
返回0;
}
实际上,它是一个大数组。所以我没有给它。无论如何,现在它被编辑了。我认为它现在有意义了。实际上,它是一个大数组。所以我没有给它。无论如何,现在它被编辑了。我认为这是有道理的,不必要的复杂。看这里我没看到你回答了你自己的问题;)不必要的复杂。看这里我没看到你回答了你自己的问题;)