# 解析

包图网

# 实例

代替修改本地Date.prototype,Day.js对Date对象进行了封装,只需要调用Dayjs()即可

Day.js对象是不可变的,也就是说,以某种方式改变Day.js对象的所有API操作都将返回它的一个新实例。

# 当前时间

直接调用 dayjs() 将返回一个包含当前日期和时间的 Day.js 对象。

var now = dayjs()

等同于 dayjs(new Date()) 的调用。

当没有传入参数时,参数默认值是 undefined,所以调用 dayjs(undefined) 就相当于调用 dayjs()

Day.js 将 dayjs(null) 视为无效的输入。

# 字符串

解析传入的 ISO 8601 (opens new window) 格式的字符串并返回一个 Day.js 对象实例。

dayjs('2018-04-04T16:00:00.000Z')

注意

为了保证结果一致,当解析除了 ISO 8601 格式以外的字符串时,您应该使用 String + Format。

# 字符串+格式

如果知道输入字符串的格式,您可以用它来解析日期。

注意

此功能依赖 CustomParseFormat 插件

dayjs.extend(customParseFormat)
dayjs("12-25-1995", "MM-DD-YYYY")

如果想解析包含本地化语言的日期字符串,可以传入第三个参数。

require('dayjs/locale/zh-cn')
dayjs('2018 三月 15', 'YYYY MMMM DD', 'zh-cn')

最后一个参数可传入布尔值来启用严格解析模式。 严格解析要求格式和输入内容完全匹配,包括分隔符。

dayjs('1970-00-00', 'YYYY-MM-DD').isValid() // true
dayjs('1970-00-00', 'YYYY-MM-DD', true).isValid() // false
dayjs('1970-00-00', 'YYYY-MM-DD', 'es', true).isValid() // false

如果您不知道输入字符串的确切格式,但知道它可能是几种中的一种,可以使用数组传入多个格式。

dayjs("12-25-2001", ["YYYY", "YYYY-MM-DD"], 'es', true);

支持的解析占位符列表:

输入 示例 描述
YY 18 两位数的年份
YYYY 2018 四位数的年份
M 1-12 月份,从 1 开始
MM 01-12 月份,两位数
MMM Jan-Dec 缩写的月份名称
MMMM January-December 完整的月份名称
D 1-31 月份里的一天
DD 01-31 月份里的一天,两位数
H 0-23 小时
HH 00-23 小时,两位数
h 1-12 小时, 12 小时制
hh 01-12 小时, 12 小时制, 两位数
m 0-59 分钟
mm 00-59 分钟,两位数
s 0-59
ss 00-59 秒,两位数
S 0-9 毫秒,一位数
SS 00-99 毫秒,两位数
SSS 000-999 毫秒,三位数
Z -05:00 UTC 的偏移量
ZZ -0500 UTC 的偏移量,两位数
A AM / PM 上午 下午 大写
a am / pm 上午 下午 小写
Do 1st... 31st 带序数词的月份里的一天
X 1410715640.579 Unix 时间戳
x 1410715640579 Unix 时间戳

# Unix 时间戳 (毫秒)

解析传入的一个 Unix 时间戳 (13 位数字,从1970年1月1日 UTC 午夜开始所经过的毫秒数) 创建一个 Day.js 对象。

dayjs(1318781876406)

注意

传递的参数必须是一个数字

# Unix 时间戳 (秒)

解析传入的一个 Unix 时间戳 (10 位数字,从1970年1月1日 Utc 午夜开始所经过的秒数) 创建一个 Day.js 对象。

dayjs.unix(1318781876)

这个方法是用 dayjs( timestamp * 1000) 实现的,所以传入时间戳里的小数点后面的秒也会被解析。

dayjs.unix(1318781876.721)

# Date 对象

使用原生 Javascript Date 对象创建一个 Day.js 对象。

var d = new Date(2018, 8, 18)
var day = dayjs(d)

这将克隆 Date 对象。 对传入的 Date 对象做进一步更改不会影响 Day.js 对象,反之亦然。

# 对象

您可以传入包含单位和数值的一个对象来创建 Dayjs 对象。

注意

此功能依赖 ObjectSupport 插件,才能正常运行

dayjs.extend(objectSupport)
dayjs({ hour:15, minute:10 });
dayjs.utc({ y:2010, M:3, d:5, h:15, m:10, s:3, ms: 123});
dayjs({ year :2010, month :3, day :5, hour :15, minute :10, second :3, millisecond :123});
dayjs({ years:2010, months:3, date:5, hours:15, minutes:10, seconds:3, milliseconds:123});

daydate 都表示月份里的日期。

dayjs({}) 返回当前时间。

注意

类似 new Date(year, month, date),月份从 0 开始计算。

# 数组

您可以传入一个数组来创建一个 Dayjs 对象,数组和结构和 new Date() 十分类似。

注意

此功能依赖 ArraySupport 插件,才能正常运行

dayjs.extend(arraySupport)
dayjs([2010, 1, 14, 15, 25, 50, 125]); // February 14th, 3:25:50.125 PM
dayjs.utc([2010, 1, 14, 15, 25, 50, 125]);
dayjs([2010]);        // January 1st
dayjs([2010, 6]);     // July 1st
dayjs([2010, 6, 10]); // July 10th

dayjs({}) 返回当前时间。

注意

类似 new Date(year, month, date), 月份从 0 开始计算。

# UTC

世界调整时间(Universal Time Coordinated)

默认情况下,Day.js 会把时间解析成本地时间。

如果想使用 UTC 时间,您可以调用 dayjs.utc() 而不是 dayjs()

在 UTC 模式下,所有显示方法将会显示 UTC 时间而非本地时间。

注意

此功能依赖 UTC 插件,才能正常运行

dayjs.extend(utc)

// 默认是当地时间
dayjs().format() //2019-03-06T08:00:00+08:00
// UTC 时间
dayjs.utc().format() // 2019-03-06T00:00:00Z
此外,在 UTC 模式下, 所有 getters 和 setters 将使用 Date#getUTC* 和 Date#setUTC* 方法而不是 Date#get* 和 Date#set* 方法。

dayjs.utc().seconds(30).valueOf()// => new Date().setUTCSeconds(30)
dayjs.utc().seconds()// => new Date().getUTCSeconds()

此外,在 UTC 模式下, 所有 getters 和 setters 将使用 Date#getUTC*Date#setUTC* 方法而不是 Date#get*Date#set* 方法。

dayjs.utc().seconds(30).valueOf()// => new Date().setUTCSeconds(30)
dayjs.utc().seconds()// => new Date().getUTCSeconds()

要在本地时间和 UTC 时间之间切换,您可以使用 dayjs#utcdayjs#local

# Dayjs 复制

所有的 Day.js 对象都是不可变的。 但如果有必要,使用 dayjs#clone 可以复制出一个当前对象。

var a = dayjs()
var b = a.clone()
// a 和 b 是两个独立的 Day.js 对象

dayjs() 里传入一个 Day.js 对象也会返回一个复制的对象。

var a = dayjs()
var b = dayjs(a)

# 验证

返回 布尔值 表示 Dayjs 的日期是否通过校验。

dayjs().isValid()

# 不严格的校验

只检查传入的值能否被解析成一个时间日期

dayjs('2022-01-33').isValid();
// true, parsed to 2022-02-02
dayjs('some invalid string').isValid();
// false

# 严格校验

检查传入的值能否被解析,且是否是一个有意义的日期。 最后两个参数 formatstrict 必须提供。

注意

此功能依赖 CustomParseFormat 插件,才能正常运行

dayjs('2022-02-31', 'YYYY-MM-DD', true).isValid();
// false
Last Updated: 11/12/2024, 11:44:06 PM