JS利用Intl解决前端日期和时间的格式化详解

目录
  • 简介
  • 构造
    • locales 参数
    • options 参数
    • Intl.NumberFormat
    • Intl.DateTimeFormat

简介

Intl 是一个全局对象,它的主要用途就是展示国际化信息,可以将字符串,数字和日期和时间转换为指定地区的格式。

在前端开发中,我们通常会使用第三方库来处理日期和数字的格式化,比如 numeraldayjsdate-fns 等库,这些库包含了许多的功能,如果我们在项目中仅仅只使用了格式化的功能的话其实是可以不用引入这些库的,JavaScript 自带的 Intl API 即可满足格式化的需求。

构造

CollatorDateTimeFormatListFormatNumberFormatPluralRulesRelativeTimeFormat 是命名空间 Intl 中的构造函数。它们接受两个参数 - localesoptions。 locales 必须是符合 BCP 47 语言标记 的字符串或字符串数组。

locales 参数

其中 locales 中常用的有:

含义
zh-Hant 用繁体字书写的中文
zh-Hans 用简体字书写的中文
zh-cmn-Hans-CN 中文,普通话,简体,用于中国
zh-Hans-CN 简体中文,用于中国大陆
zh-yue-HK 中文,广东话,香港特别行政区使用
cmn-Hans-CN 简体中文,用于中国
yue-HK 粤语,香港特别行政区使用
en-US 美式英语 (US English)
en-GB 英式英语 (British English)
ko-KR 韩语
ja-JP 日语

options 参数

options 参数必须是一个对象,其属性值在不同的构造函数和方法中会有所变化。如果 options 参数未提供或者为 undefined,所有的属性值则使用默认的。

Intl.NumberFormat

Intl.NumberFormat 对象能使数字在特定的语言环境下格式化。

const number = 123456.789

console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number))
// Expected output: "123.456,79 €"

// The Japanese yen doesn't use a minor unit
console.log(new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }).format(number))
// Expected output: "¥123,457"

console.log(new Intl.NumberFormat('zh-CN', {}).format(number))
// "123,456.789"

常用 options 参数

style:要使用的格式样式,默认为 decimal

  • decimal 用于普通数字格式。
  • currency 用于货币格式。
  • percent 用于百分比格式。
  • unit 用于单位格式。

currency:用于货币格式的货币(没有默认值,如果 style 的值是 currency 则必须提供)。可能的值是 ISO 4217 货币代码,例如 CNY 代表人民币, USD 代表美元,EUR 代表欧元,JPY 代表日元。

currencyDisplay:如何以货币格式显示货币。可能的值是:

  • symbol 使用本地化的货币符号,例如 €。这是默认值。
  • narrowSymbol 使用简称($100 而不是 US$100)。
  • code 使用 ISO 货币代码。
  • name 使用本地化的货币名称,例如 dollar

currencySign:在许多区域设置中,记帐格式将数字括在括号中而不是添加减号。currencySign 通过将选项设置为 accounting 启用此格式。默认为 standard

unitunit 的格式中使用的单位,可能的值是核心单位标识符,如UTS #35,第 2 部分,第 6 节中所定义。从整个列表中选择了一部分单元用于 ECMAScript。一对简单单位 -per- 可以用组合成一个复合单位。没有默认值。如果是 styleunit,则必须指定该属性。

unitDisplayunit 用于格式化的单位格式化样式,默认为 short

  • long(例如 16 litres)
  • short(例如 16 l)
  • narrow(例如 16l)

notation:一种显示数值的格式。默认为 standard

  • standard 是正常的数字格式。
  • scientific:使用科学记数法表示,比如 4.5E5
  • engineering: 返回 10 的幂能够被 3 整除的科学计数表示(如果一个数小于 1000,则表示为 123 - 123E0,如果一个数大于 1000 小于 1000000,则表示为 45100 - 45.1E3)。
  • compact 是表示指数表示法的字符串,默认使用“短”格式。

compactDisplay:仅在 notationcompact 时使用。可以是 short(默认)或 long

maximumFractionDigits:最大分数位数(最多保留几位小数)

minimumFractionDigits:最小分数位数(最少保留几位小数)

maximumSignificantDigits:最多几位有效数字

例子

货币

const numbers = [245, 2345234.2345, 3456]

const formatter = new Intl.NumberFormat('zh-CN', {
  style: 'currency',
  currency: 'CNY',
  minimumFractionDigits: 2,
  maximumFractionDigits: 2,
})

numbers.forEach((number) => {
  console.log(formatter.format(number))
})
// ¥245.00
// ¥2,345,234.23
// ¥3,456.00

new Intl.NumberFormat('cmn-Hans-CN', {
  style: 'currency',
  currency: 'CNY',
  currencyDisplay: 'name',
  minimumFractionDigits: 2,
  maximumFractionDigits: 2,
}).format(245) // 245.00人民币

new Intl.NumberFormat('cmn-Hans-CN', {
  style: 'currency',
  currency: 'CNY',
  currencyDisplay: 'name',
  minimumFractionDigits: 2,
  maximumFractionDigits: 2,
}).format(2345234.2345) // 2,345,234.23 人民幣

百分比

new Intl.NumberFormat('cmn-Hans-CN', { style: 'percent' }).format(34) // 3,400%

new Intl.NumberFormat('cmn-Hans-CN', { style: 'percent' }).format(0.34) // 34%

单位格式

new Intl.NumberFormat('cmn-Hans-CN', { style: 'unit', unit: 'kilometer-per-hour' }).format(4522) // 4,522 km/h

new Intl.NumberFormat('cmn-Hans-CN', {
  style: 'unit',
  unit: 'kilometer-per-hour',
  unitDisplay: 'long',
}).format(4522) // 每小时4,522公里

new Intl.NumberFormat('cmn-Hans-CN', {
  style: 'unit',
  unit: 'kilometer-per-hour',
  unitDisplay: 'narrow',
}).format(4522) // 4,522km/h

科学缩写

console.log(new Intl.NumberFormat('cmn-Hans-CN', { notation: 'scientific' }).format(452136)) // 4.521E5
console.log(new Intl.NumberFormat('cmn-Hans-CN', { notation: 'engineering' }).format(452136)) // 452.136E3
console.log(new Intl.NumberFormat('cmn-Hans-CN', { notation: 'compact' }).format(452136)) // 45万

Intl.DateTimeFormat

Intl.DateTimeFormat 对象能使日期和时间在特定的语言环境下格式化。

常用 options 参数

dateStyle:调用 format() 时使用的日期格式样式。可能的值包括:

  • full
  • long
  • medium
  • short(默认值)

timeStyle:调用 format() 时使用的时间格式样式。可能的值包括:

  • full
  • long
  • medium
  • short(默认值)

dayPeriod: 用于“早上”、“上午”、“中午”、“n”等日期时间段的格式样式。可能的值包括: narrow, short, long

timeZone: 时区,比如上海“Asia/Shanghai”,纽约是"America/New_York"

hourCycle: 要使用的小时周期(12小时制,24小时制) 值可以为:h11h12h23h24

weekday: 工作日的表示形式。可能的值为:

  • long(例如,Thursday)
  • short(例如,Thu)
  • narrow(例如,)。两个工作日可能 对于某些语言环境具有相同的窄样式(例如 的窄样式也是)。TTuesdayT

year: 年份的表示。可能的值为:

  • numeric(例如,2012)
  • 2-digit(例如,12)

month: 月份的表示。可能的值为:

  • numeric(例如,2)
  • 2-digit(例如,02)
  • long(例如,March)
  • short(例如,Mar)
  • narrow

day: 一天的表示。可能的值为:

  • numeric(例如,1)
  • 2-digit(例如,01)

hour: 小时的表示。可能的值为:

  • numeric(例如,1)
  • 2-digit(例如,01)

minute: 分钟的表示。可能的值为:

  • numeric(例如,1)
  • 2-digit(例如,01)

second: 秒的表示。可能的值为:

  • numeric(例如,1)
  • 2-digit(例如,01)

fractionalSecondDigits: 用于表示秒小数部分的位数(其他的数字将被截断)。可能的值为:

  • 0: 小数部分全部丢弃。
  • 1: 小数部分表示为 1 位数字。为 例如.736 的格式为 .7
  • 2:小数部分表示为 2 位数字。为 例如 .736 的格式为 .73
  • 3:小数部分表示为 3 位数字。为 例如 .736 的格式为 .736

例子

const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
console.log(new Intl.DateTimeFormat('zh-CN').format(date)); // "2012/12/20"
console.log(new Intl.DateTimeFormat('zh-CN', {
  dateStyle: 'full',
  timeStyle: 'long',
  timeZone: 'Asia/Shanghai'
}).format(date)); // “2012年12月20日星期四 GMT+8 11:00:00”
console.log(new Intl.DateTimeFormat('zh-CN', {
  dateStyle: 'full',
  timeStyle: 'short',
  timeZone: 'Asia/Shanghai'
}).format(date)); // “2012年12月20日星期四 11:00”
console.log(new Intl.DateTimeFormat('zh-CN', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit'
}).format(date)); // “2012/12/20”

到此这篇关于JS利用Intl解决前端日期和时间的格式化详解的文章就介绍到这了,更多相关JS Intl解决日期时间格式化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue中金额、日期格式化插件@formatjs/intl的使用及说明

    目录 Vue金额.日期格式化插件@formatjs/intl使用 Intl.NumberFormat用于数字计算 数字分组 位数控制 长度表示 字节单位表示 复合单位表示 百分比表示 货币表示 质量表示 温度表示 容积表示 角度表示 大数字表示 总结 Vue金额.日期格式化插件@formatjs/intl使用 vue项目中我们可以使用第三方比较牛的日期.金额数字格式化的插件:@formatjs/intl 这个插件的官方地址是: https://formatjs.io/docs/intl/ 更方便

  • react国际化react-intl的使用

    react怎么实现国际化?react-intl插件提供了一套实现react国际化的方法,具体实现如下~~ 一 搭建react环境和下载相应插件 默认你已经安装了nodejs 如果没有装的百度装下 这里不再细讲 利用react官方脚手架搭建react项目,已经存在有的react项目也可忽略搭建这步:然后下载相关依赖 react-intl npx create-react-app react-intl-demo npm i react-intl -S 等待下载完成 找到项目根目录下的src文件夹 在

  • JS利用Intl解决前端日期和时间的格式化详解

    目录 简介 构造 locales 参数 options 参数 Intl.NumberFormat Intl.DateTimeFormat 简介 Intl 是一个全局对象,它的主要用途就是展示国际化信息,可以将字符串,数字和日期和时间转换为指定地区的格式. 在前端开发中,我们通常会使用第三方库来处理日期和数字的格式化,比如 numeral.dayjs.date-fns 等库,这些库包含了许多的功能,如果我们在项目中仅仅只使用了格式化的功能的话其实是可以不用引入这些库的,JavaScript 自带的

  • Angular.js组件之input mask对input输入进行格式化详解

    前言 最近因为项目的需要,经常有一些对input输入进行格式化的需求,以前做的时候在js中写指令进行处理,但是这样又要在js或者在java代码中将请求的数据进行还原,很是麻烦,于是在网上看到了jquery的inputmask组件,觉得很好用,在项目中写出指令,用起来很方便. 方法如下: 在项目中引入jquery和jquery-inputmask,然后在项目中写指令,如下: define(['./module'], function (directives) { 'use strict'; dir

  • JS利用循环解决的一些常见问题总结

    目录 1. 打印0-100中3的倍数 2. 在页面中写入 1000-2000年中的闰年 3. 打印100以内所有偶数的和 4.求出1-1/2+1/3-1/4……1/100的和 5. 打印三角形 5.1 普通三角形 5.2 倒三角 5.3 等腰三角形 6.等腰梯形 7.输出100-200之间所有的质数 9. 有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量 10.在页面上完成以一个九九乘法表 11.打印一个3行

  • 国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程

    目录 1. 页面布局 2. 图片上传和展示 3. 初始化画布 4. 切换模板 5. 输出图片 这里用到的技术: HTML+ CSS+ JavaScript: download.js库: fabric.js库: 先上体验链接:g.cuggz.com/.​ 注:可以点击上方的连接进行使用,不过我的域名被TX屏蔽了,还在申诉中,所以无法在QQ.微信中打开,需要复制链接到浏览器进行查看.使用.​ 下面是这个小工具的截图: 1. 页面布局 这部分不多说,直接上代码: <div class="wrap

  • java时间日期使用与查询代码详解

    只要格式正确,直接比较字符串就可以了呀,精确到秒的也一样 String s1 = "2003-12-12 11:30:24"; String s2 = "2004-04-01 13:31:40"; int res = s1.compareTo(s2); 求日期差 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date begin=df.parse("

  • JS写XSS cookie stealer来窃取密码的步骤详解

    JavaScript是web中最常用的脚本开发语言,js可以自动执行站点组件,管理站点内容,在web业内实现其他有用的函数.JS可以有很多的函数可以用做恶意用途,包括窃取含有密码等内容的用户cookie. Cookie是站点请求和保持特定访问页面的信息.Cookie含有访问的方式.时间.用户名密码等认证信息等.当用户访问给定站点时,必须使用cookie:如果攻击者可以拦截cookie,就可以利用cookie窃取用户的一些信息.对某个特定的域名,使用JS可以保存或修改用户的cookie.也就是说,

  • 利用CDN加速react webpack打包后的文件详解

    此文不介绍webpack基本配置,如果对基本配置有疑问请查阅官方文档. 1.配置webpack.config.js 将output.publicPath改成上传到的cdn地址, 例(对应上面上传配置): publicPath: "https://your_base_cdn_url" + process.env.NODE_ENV + "/cdn/" 打包 NODE_ENV=production node_modules/webpack/bin/webpack.js -

  • vue项目前端错误收集之sentry教程详解

    sentry简介 Sentry 是一个开源的错误追踪工具,可以帮助开发人员实时监控和修复系统中的错误.其专注于错误监控以及提取一切事后处理所需的信息;支持几乎所有主流开发语言( JS/Java/Python/php )和平台, 并提供了web来展示输出错误. sentry官网: https://sentry.io/ sentry安装 sentry 是一个开源的工具,可以自行搭建. 官方支持两种安装和运行 Sentry 服务器的方法, Docker 和 Python .推荐使用 Docker .

  • 深度思考JDK8中日期类型该如何使用详解

    在JDK8之前,处理日期时间,我们主要使用3个类, Date . SimpleDateFormat 和 Calendar . 这3个类在使用时都或多或少的存在一些问题,比如 SimpleDateFormat 不是线程安全的, 比如 Date 和 Calendar 获取到的月份是0到11,而不是现实生活中的1到12,关于这一点,<阿里巴巴Java开发手册>中也有提及,因为很容易犯错: 不过,JDK8推出了全新的日期时间处理类解决了这些问题,比如 Instant . LocalDate . Loc

  • redis 解决key的乱码问题,并清理详解

    key乱码问题 因redis默认使用JdkSerializationRedisSerializer来进行序列化,造成key是乱码,如下: keys '*!report:flag:phon*' 1) "\xac\xed\x00\x05t\x00!report:flag:phone_156464" 2) "\xac\xed\x00\x05t\x00!report:flag:phone_198946" 3) "\xac\xed\x00\x05t\x00!repo

随机推荐