强大的toLocaleString

1,681 阅读3分钟

前言:说起来toLocaleString,我一直信以为真的使用就是千分位划分,今天看到了别人的代码,才发现它的用处远不止千分位划分

1、千分位逗号(,)划分

这个当然肯定是不能少的,并且它会自动兼容小数比常规正则要简单好多

let a = 12345600789
a.toLocaleString()
//'12,345,600,789'

let a = 123456.00789
a.toLocaleString()
//'123,456.008'

并且它还有很多国际化场景的应用

// nu 扩展字段要求编号系统,e.g. 中文十进制
a.toLocaleString('zh-Hans-CN-u-nu-hanidec')
// '一二,三四五,六〇〇,七八九'

// 在大多数阿拉伯语国家使用阿拉伯语数字
a.toLocaleString('ar-EG');
// '١٢٬٣٤٥٬٦٠٠٬٧٨٩'

// 德国使用逗号作为小数分隔符,分位周期为千位
a.toLocaleString('de-DE');
// '12.345.600.789'

它也可以通过options进行参数定制货币格式转换

let a = 12345600789
let options = { style:'currency',currency:'CNY'}; 
a.toLocaleString('zn-CN',options);
//'¥12,345,600,789.00'
日元
a.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })
'12.345.600.789,00 €'
限制三位有效数字
a.toLocaleString('en-IN', { maximumSignificantDigits: 3 })
'12,30,00,00,000'

2、转换日期格式

let d=new Date();let n=d.toLocaleString();
n // '2021/12/6 下午4:34:17'

扩展:不同国家区域时间转化
let date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

//假定本地时区是 America/Los_Angeles(美国时区)
//en-US(美利坚英语)使用 month-day-year 的顺序展示年月日
console.log(date.toLocaleString("en-US"));
//  "12/19/2012, 7:00:00 PM"

// en-GB(不列颠英语)使用 day-month-year 顺序展示年月日
console.log(date.toLocaleString("en-GB"));
// "20/12/2012 03:00:00"

// 韩语使用 year-month-day 顺序展示年月日
console.log(date.toLocaleString("ko-KR"));
// "2012. 12. 20. 오후 12:00:00"

// 大多数阿拉伯语国家的阿拉伯语使用阿拉伯数字
console.log(date.toLocaleString("ar-EG"));
// "٢٠‏/١٢‏/٢٠١٢ ٥:٠٠:٠٠ ص"

//在日本,应用可能想要使用日本日历,
//2012 是平成24年(平成是是日本天皇明仁的年号,由1989年1月8日起开始计算直至现在)
console.log(date.toLocaleString("ja-JP-u-ca-japanese"));
// "24/12/20 12:00:00"

//当请求一个语言可能不支持,如巴厘(ban),若有备用的语言印尼语(id),
//那么将使用印尼语(id)
console.log(date.toLocaleString(["ban", "id"]));
//"20/12/2012 11.00.00"

当然也可以用options参数定义显示类型格式

let date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

//请求参数(options)中包含参数星期(weekday),并且该参数的值为长类型(long)
let options = {weekday: "long", year: "numeric", month: "long", day: "numeric"};
console.log(date.toLocaleString("de-DE", options));
//"Donnerstag, 20. Dezember 2012"

//一个应用使用 世界标准时间(UTC),并且UTC使用短名字(short)展示
options.timeZone = "UTC";
options.timeZoneName = "short";//若不写这一行那么仍然显示的是世界标准时间;但是GMT三个字母不会显示
console.log(date.toLocaleString("en-US", options));
// "Thursday, December 20, 2012, GMT"

// 使用24小时制
console.log(date.toLocaleString("en-US", {hour12: false}));
//"12/19/2012, 19:00:00"

3、数组转化为字符串

var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
// George, John, Thomas

4、转换为百分比

使用 toLocaleString() 将数字转为百分比let a = 1;console.log(a.toLocaleString('zh',{style:'percent'}))
// 100%
let b = 2;console.log(b.toLocaleString('zh',{style:'percent'}))
// 200%
let c = 0.9;console.log(c.toLocaleString('zh',{style:'percent'}))
//90%

兼容性

补充下兼容性 忘记了

欢迎大家补充👏