【總結】國際化數字格式處理解決神器

Eric_zhang發表於2019-03-04

背景

最近公司專案出海速度增快,相同的業務模式,前端大部分的業務程式碼都可以複用,其中需要額外處理的有幾個模組:

  • 語言包
  • 貨幣符號
  • 數字顯示格式(包括日期、千分位規則等)

其中對於不同的國家,其數字顯示格式略有不同,比如千分位格式,針對不同國家維護一套正則匹配需要增加開發和後期維護成本,這就引出了今天介紹的toLocaleString()神器

toLocaleString 用法

Number.prototype.toLocaleString()

numObj.toLocaleString([locales [, options]])

  • locales 語言引數,用來確定國家和語言;比如es-MX 表示墨西哥的西語、es-AR 表示阿根廷的西語、pt-BR 表示巴西的葡萄牙
  • options 一個object,配置具體展示的形式,常用的屬性有: 1.style 展示百分比 or 純數字格式(預設) 2.currency 貨幣符號 3.minimumFractionDigits 最少小數位數 4.maximumFractionDigits 最大小數位數
var num1 = 84629489879879.6223
num1.toLocaleString('pt-BR', { maximumFractionDigits: 2 })
// "84.629.489.879.879,62"

var num2 = 84629489879879.6223
num2.toLocaleString('es-MX', { maximumFractionDigits: 2 })
// "84,629,489,879,879.62"
複製程式碼

Date.prototype.toLocaleString()

1.dateObj.toLocaleString([locales [, options]]) 返回日期+時間的格式化結果,常見配置同上

// US English uses month-day-year order
var date1 = new Date()
date1.toLocaleString('en-US')
// "1/21/2019, 4:18:12 PM"

// British English uses day-month-year order
var date2 = new Date()
date2.toLocaleString('en-GB')
// "21/01/2019, 16:18:47"

// British English uses day-month-year order
var date3 = new Date()
date3.toLocaleString('ko-KR')
// "2019. 1. 21. 오후 4:19:21"
複製程式碼

2.dateObj.toLocaleDateString([locales [, options]]) 只返回date部分的格式化結果

var date1 = new Date()
date1.toLocaleDateString('en-US')
// "1/21/2019"

var date2 = new Date()
date2.toLocaleDateString('en-GB')
// "21/01/2019"

var date3 = new Date()
date3.toLocaleDateString('ko-KR')
// "2019. 1. 21."
複製程式碼

3.dateObj.toLocaleTimeString([locales [, options]]) 只返回time部分的格式化結果

var date1 = new Date()
date1.toLocaleTimeString('en-US')
// "4:28:24 PM"

var date2 = new Date()
date2.toLocaleTimeString('en-GB')
// "16:27:50"

var date3 = new Date()
date3.toLocaleTimeString('ko-KR')
// "오후 4:28:54"
複製程式碼

參考連結

Number.prototype.toLocaleString

Date.prototype.toLocaleString

相關文章