插件是一个独立的模块,可以添加到Day.js来扩展功能或添加新特性。

默认情况下,Day.js只提供核心代码,没有安装插件。

您可以根据需要加载多个插件。

自定义

您可以构建自己的Day.js插件来满足不同的需求。

请随意打开一个pull request来共享你的插件。

Day.js插件的模板。

export default (option, dayjsClass, dayjsFactory) => {
  // extend dayjs()
  // e.g. add dayjs().isSameOrBefore()
  dayjsClass.prototype.isSameOrBefore = function(arguments) {}

  // extend dayjs
  // e.g. add dayjs.utc()
  dayjsFactory.utc = arguments => {}

  // overriding existing API
  // e.g. extend dayjs().format()
  const oldFormat = dayjsClass.prototype.format
  dayjsClass.prototype.format = function(arguments) {
    // original format result
    const result = oldFormat.bind(this)(arguments)
    // return modified result
  }
}

# 在NodeJS中加载插件

按需加载插件。

var AdvancedFormat = require('dayjs/plugin/advancedFormat')
// import AdvancedFormat from 'dayjs/plugin/advancedFormat' // ES 2015

dayjs.extend(AdvancedFormat) // use plugin

# 在浏览器中加载插件

按需加载插件。

<script src="path/to/dayjs/plugin/advancedFormat"></script>
<!-- Load plugin as window.dayjs_plugin_NAME -->
<script>
  dayjs.extend(window.dayjs_plugin_advancedFormat)
</script>

Day.js可在CDN上使用。

<!-- CDN example (unpkg) -->
<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>
<script src="https://unpkg.com/dayjs@1.8.21/plugin/utc.js"></script>
<script>dayjs.extend(window.dayjs_plugin_utc)</script>

# 高级格式

AdvancedFormat延伸dayjs()。格式化API以提供更多的格式选项。

var advancedFormat = require('dayjs/plugin/advancedFormat')
dayjs.extend(advancedFormat)

dayjs().format('Q Do k kk X x')

已有的格式列表:

格式 输出 描述
Q 1-4 季度
Do 1st 2nd ... 31st 月份的日期与序号
k 1-24 整点,1点开始
kk 01-24 小时,2位数,从1开始
X 1360013296 Unix时间戳为秒
x 1360013296123 Unix时间戳(毫秒)
w 1 2 ... 52 53 年周(依赖于WeekOfYear插件)
ww 01 02 ... 52 53 年份的周数,2位数(依赖于WeekOfYear插件)
wo 1st 2nd ... 52nd 53rd 带序号的年份周(依赖于WeekOfYear插件)
gggg 2017 周年(依赖于WeekYear插件)

# 可变

Day.js设计是不可变的,然而,为了充分兼容moment.js在某些遗留项目,我们引入一个插件🚨BadMutable🚨Day.js可变的。

注意

这并不好,也不推荐在大多数项目中使用。

启用这个插件后,所有的setter都将更新实例本身。

var badMutable = require('dayjs/plugin/badMutable')
dayjs.extend(badMutable)
// with 🚨 BadMutable 🚨 plugin
const today = dayjs()
today.add(1, 'day')
console.log(today) // update itself, value will be tomorrow

# BuddhistEra

BuddhistEra延伸dayjs().formatAPI以提供佛教时代(B.E.)格式选项。

佛教纪元是一个年份编号系统,主要用于柬埔寨、老挝、缅甸和泰国等东南亚大陆国家,以及斯里兰卡和马来西亚和新加坡的华人在宗教或官方场合使用(维基百科)。

手工计算是年份,只需将543加到年份。例如,1977年5月26日AD/CE应该显示为2520年5月26日BE(1977 + 543)。

var buddhistEra = require('dayjs/plugin/buddhistEra')
dayjs.extend(buddhistEra)

dayjs().format('BBBB BB')

已有的格式列表:

格式 输出 描述
BBBB 2561 满一年(年+ 543)
BB 61 两位数的年份

# 日历

日历添加.calendar API来返回一个string来显示日历时间

var calendar = require('dayjs/plugin/calendar')
dayjs.extend(calendar)

dayjs().calendar(dayjs('2008-01-01'))
dayjs().calendar(null, {
  sameDay: '[Today at] h:mm A', // The same day ( Today at 2:30 AM )
  nextDay: '[Tomorrow]', // The next day ( Tomorrow at 2:30 AM )
  nextWeek: 'dddd', // The next week ( Sunday at 2:30 AM )
  lastDay: '[Yesterday]', // The day before ( Yesterday at 2:30 AM )
  lastWeek: '[Last] dddd', // Last week ( Last Monday at 2:30 AM )
  sameElse: 'DD/MM/YYYY' // Everything else ( 7/10/2011 )
})

# 自定义解析格式

CustomParseFormat扩展了dayjs()构造函数,以支持输入字符串的自定义格式。

var customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)

dayjs('05/02/69 1:02:03 PM -05:00', 'MM/DD/YY H:mm:ss A Z')
// Returns an instance containing '1969-05-02T18:02:03.000Z'

dayjs('2018 Enero 15', 'YYYY MMMM DD', 'es')
// Returns an instance containing '2018-01-15T00:00:00.000Z'

dayjs('1970-00-00', 'YYYY-MM-DD', true) // strict parsing

所有可用解析标记的列表

标识 示例 描述
YY 18 年,两位数
YYYY 2018 年,四位数
M 1-12 月,从1开始
MM 01-12 月,两位数字
MMM Jan-Dec 月,英文缩写
D 1-31
DD 01-31 日,两位数
H 0-23 24小时
HH 00-23 24小时,两位数
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 月份的日期与序号

DayOfYear添加了.DayOfYear() API来返回一个number,表示Dayjs的年份,或者设置年份的日期。

# DayOfYear

var dayOfYear = require('dayjs/plugin/dayOfYear')
dayjs.extend(dayOfYear)

dayjs('2010-01-01').dayOfYear() // 1
dayjs('2010-01-01').dayOfYear(365) // 2010-12-31

# 持续时间

Duration添加了.Duration .isDuration api来支持Duration。

var duration = require('dayjs/plugin/duration')
dayjs.extend(duration)

dayjs.duration(100)

# 是否日期之间

IsBetween添加了.IsBetween() API来返回一个Boolean,指示一个日期是否在另外两个日期之间。

var isBetween = require('dayjs/plugin/isBetween')
dayjs.extend(isBetween)

dayjs('2010-10-20').isBetween('2010-10-19', dayjs('2010-10-25'), 'year')
dayjs('2016-10-30').isBetween('2016-01-01', '2016-10-30', null, '[)')
// '[' indicates inclusion, '(' indicates exclusion

# 是否闰年

IsLeapYear添加了.IsLeapYear API来返回一个boolean,指示Dayjs的年份是否为闰年。

var isLeapYear = require('dayjs/plugin/isLeapYear')
dayjs.extend(isLeapYear)

dayjs('2000-01-01').isLeapYear() // true

# 相同或之后

IsSameOrAfter添加了.IsSameOrAfter() API来返回一个boolean,指示日期是相同的还是在另一个日期之后。

var isSameOrAfter = require('dayjs/plugin/isSameOrAfter')
dayjs.extend(isSameOrAfter)

dayjs('2010-10-20').isSameOrAfter('2010-10-19', 'year')

# 相同或之前

IsSameOrBefore添加了.IsSameOrBefore() API来返回一个boolean,指示一个日期是相同的还是在另一个日期之前。

var isSameOrBefore = require('dayjs/plugin/isSameOrBefore')
dayjs.extend(isSameOrBefore)

dayjs('2010-10-20').isSameOrBefore('2010-10-19', 'year')

# 是否今天

IsToday添加.IsToday() API来指示Day.js对象是否为今天。

var isToday = require('dayjs/plugin/isToday')

dayjs.extend(isToday)

dayjs().isToday() // true

# 是否明天

添加.IsTomorrow() API来指示Day.js对象是否为明天。

var isTomorrow = require('dayjs/plugin/isTomorrow')

dayjs.extend(isTomorrow)

dayjs().add(1, 'day').isTomorrow() // true

# 是否昨天

IsYesterday添加了.IsYesterday() API来指示Day.js对象是否为昨天。

var isYesterday = require('dayjs/plugin/isYesterday')

dayjs.extend(isYesterday)

dayjs().add(-1, 'day').isYesterday() // true

# iso周

IsoWeek添加了.IsoWeek() API来获取或设置ISO年度周。并添加.isoweekday()来获取或设置ISO周日,.isoweekyear()来获取ISO周年,并扩展.startof .endof api来支持单元isoWeek

var isoWeek = require('dayjs/plugin/isoWeek')

dayjs.extend(isoWeek)

dayjs().isoWeek()
dayjs().isoWeekday()
dayjs().isoWeekYear()

# 年ISO周数

IsoWeeksInYear添加了.IsoWeeksInYear() API来返回一个number,以根据ISO周数获得一年中的周数。

注意

此功能依赖IsLeapYear插件

var isoWeeksInYear = require('dayjs/plugin/isoWeeksInYear')
var isLeapYear = require('dayjs/plugin/isLeapYear') // dependent on isLeapYear plugin
dayjs.extend(isoWeeksInYear)
dayjs.extend(isLeapYear)

dayjs('2004-01-01').isoWeeksInYear() // 53
dayjs('2005-01-01').isoWeeksInYear() // 52

# 本地化数据

LocaleData延伸dayjs().localeAPI,支持本地数据。

var localeData = require('dayjs/plugin/localeData')
dayjs.extend(localeData)

dayjs().localeData()

可用方法:

dayjs.months()
dayjs.monthsShort()
dayjs.weekdays()
dayjs.weekdaysShort()
dayjs.weekdaysMin()

globalLocaleData = dayjs.localeData()
globalLocaleData.firstDayOfWeek()
globalLocaleData.months()
globalLocaleData.monthsShort()
globalLocaleData.weekdays()
globalLocaleData.weekdaysShort()
globalLocaleData.weekdaysMin()

globalLocaleData.months(dayjs())
globalLocaleData.monthsShort(dayjs())
globalLocaleData.weekdays(dayjs())
globalLocaleData.weekdaysShort(dayjs())
globalLocaleData.weekdaysMin(dayjs())

instanceLocaleData = dayjs().localeData()
instanceLocaleData.firstDayOfWeek()
instanceLocaleData.months()
instanceLocaleData.monthsShort()
instanceLocaleData.weekdays()
instanceLocaleData.weekdaysShort()
instanceLocaleData.weekdaysMin()

# 本地化格式

LocalizedFormat延伸dayjs().formatAPI以提供本地化的格式选项。

var localizedFormat = require('dayjs/plugin/localizedFormat')
dayjs.extend(localizedFormat)

dayjs().format('L LT')

本地化格式列表

格式 英美 输出结果
LT h:mm A 8:02 PM
LTS h:mm:ss A 8:02:18 PM
L MM/DD/YYYY 08/16/2018
LL MMMM D, YYYY August 16, 2018
LLL MMMM D, YYYY h:mm A August 16, 2018 8:02 PM
LLLL dddd, MMMM D, YYYY h:mm A Thursday, August 16, 2018 8:02 PM
l M/D/YYYY 8/16/2018
ll MMM D, YYYY Aug 16, 2018
lll MMM D, YYYY h:mm A Aug 16, 2018 8:02 PM
llll ddd, MMM D, YYYY h:mm A Thu, Aug 16, 2018 8:02 PM

# 最小值最大值

MinMax添加了.min .max api来返回一个dayjs来比较给定的dayjs实例。

var minMax = require('dayjs/plugin/minMax')
dayjs.extend(minMax)

dayjs.max(dayjs(), dayjs('2018-01-01'), dayjs('2019-01-01'))
dayjs.min([dayjs(), dayjs('2018-01-01'), dayjs('2019-01-01')])

# 对象支持

ObjectSupport扩展了dayjs()dayjs().set,dayjs().adddayjs().subtractapi来支持对象参数。

var objectSupport = require("dayjs/plugin/objectSupport");
dayjs.extend(objectSupport);

dayjs({
  year: 2010,
  month: 1,
  day: 12
});
dayjs().set({ year: 2010, month: 1, day: 12 })
dayjs().add({ M: 1 })
dayjs().subtract({ month: 1 })

# 年季度

添加.quarter() API来返回一年中的哪个季度属于一个日期,并扩展.add .subtract .startof .endof API来支持单元quarter

var quarterOfYear = require('dayjs/plugin/quarterOfYear')
dayjs.extend(quarterOfYear)

dayjs('2010-04-01').quarter() // 2
dayjs('2010-04-01').quarter(2)

# 相对时间

RelativeTime添加了.from .to .fromNow .toNow api来格式化日期到相对时间字符串(例如3小时前)。

var relativeTime = require('dayjs/plugin/relativeTime')
dayjs.extend(relativeTime)

dayjs().from(dayjs('1990')) // 2 years ago
dayjs().from(dayjs(), true) // 2 years

dayjs().fromNow()

dayjs().to(dayjs())

dayjs().toNow()

# 时区

时区增加了 dayjs.tz .tz .tz.guess .tz.setDefault api来解析或显示时区。

var utc = require('dayjs/plugin/utc') // dependent on utc plugin
var timezone = require('dayjs/plugin/timezone')
dayjs.extend(utc)
dayjs.extend(timezone)

dayjs.tz("2014-06-01 12:00", "America/New_York")

dayjs("2014-06-01 12:00").tz("America/New_York")

dayjs.tz.guess()

dayjs.tz.setDefault("America/New_York")

# 转数组

ToArray添加了.toArray() API来返回反映参数的数组

var toArray = require('dayjs/plugin/toArray')
dayjs.extend(toArray)

dayjs('2019-01-25').toArray() // [ 2019, 0, 25, 0, 0, 0, 0 ]

# 转对象

添加.ToObject() API来返回一个带有日期属性的object

var toObject = require('dayjs/plugin/toObject')
dayjs.extend(toObject)

dayjs('2019-01-25').toObject()
/* { years: 2019,
     months: 0,
     date: 25,
     hours: 0,
     minutes: 0,
     seconds: 0,
     milliseconds: 0 } */

# 更新本地化

UpdateLocale添加.UpdateLocale API来更新语言环境的属性。

var updateLocale = require('dayjs/plugin/updateLocale')
dayjs.extend(updateLocale)

dayjs.updateLocale('en', {
  months : String[]
})

# UTC

UTC添加了.utc .local .isUTC .utcOffsetapi来解析或显示UTC。

var utc = require('dayjs/plugin/utc')
dayjs.extend(utc)

// default local time
dayjs().format() //2019-03-06T17:11:55+08:00

// UTC mode
dayjs.utc().format() // 2019-03-06T09:11:55Z

// convert local time to UTC time
dayjs().utc().format() // 2019-03-06T09:11:55Z 

// While in UTC mode, all display methods will display in UTC time instead of local time.
// And all getters and setters will internally use the Date#getUTC* and Date#setUTC* methods instead of the Date#get* and Date#set* methods.
dayjs.utc().isUTC() // true
dayjs.utc().local().format() //2019-03-06T17:11:55+08:00
dayjs.utc('2018-01-01', 'YYYY-MM-DD') // with CustomParseFormat plugin

默认情况下,Day.js以本地时间解析和显示。

如果你想用UTC来解析或显示,你可以使用dayjs.UTC()代替dayjs()

# 星期

添加.WeekDay() API来获取或设置语言环境的星期几。

var weekday = require('dayjs/plugin/weekday')
dayjs.extend(weekday)

// when Monday is the first day of the week
dayjs().weekday(-7) // last Monday
dayjs().weekday(7) // next Monday

# 年周

WeekOfYear添加了.week() API来返回一个数字,表示Dayjs的年度周数。

var weekOfYear = require('dayjs/plugin/weekOfYear')
dayjs.extend(weekOfYear)

dayjs('2018-06-27').week() // 26
dayjs('2018-06-27').week(5) // set week

# 周年

添加.WeekYear() API以获得语言环境的周。

var weekYear = require('dayjs/plugin/weekYear')
var weekOfYear = require('dayjs/plugin/weekOfYear') // dependent on weekOfYear plugin
dayjs.extend(weekOfYear)
dayjs.extend(weekYear)

dayjs().weekYear()
Last Updated: 1/19/2021, 11:00:24 PM