Day.js非常容易定制。

您可以创建一个新的locale。

var localeObject = {...} // Day.js locale Object, detailed below
dayjs.locale('en-my-settings', localeObject);

更新现有的语言环境。

注意

此功能依赖UpdateLocale插件

dayjs.extend(updateLocale)

dayjs.updateLocale('en', {
  // ...
})

Day.js locale对象的模板。

const localeObject = {
  name: 'es', // name String
  weekdays: 'Domingo_Lunes ...'.split('_'), // weekdays Array
  weekdaysShort: 'Sun_M'.split('_'), // OPTIONAL, short weekdays Array, use first three letters if not provided
  weekdaysMin: 'Su_Mo'.split('_'), // OPTIONAL, min weekdays Array, use first two letters if not provided
  weekStart: 1, // OPTIONAL, set the start of a week. If the value is 1, Monday will be the start of week instead of Sunday。
  yearStart: 4, // OPTIONAL, the week that contains Jan 4th is the first week of the year.
  months: 'Enero_Febrero ... '.split('_'), // months Array
  monthsShort: 'Jan_F'.split('_'), // OPTIONAL, short months Array, use first three letters if not provided
  ordinal: n => `${n}º`, // ordinal Function (number) => return number + output
  formats: {
    // abbreviated format options allowing localization
    LTS: 'h:mm:ss A',
    LT: 'h:mm A',
    L: 'MM/DD/YYYY',
    LL: 'MMMM D, YYYY',
    LLL: 'MMMM D, YYYY h:mm A',
    LLLL: 'dddd, MMMM D, YYYY h:mm A',
    // lowercase/short, optional formats for localization
    l: 'D/M/YYYY',
    ll: 'D MMM, YYYY',
    lll: 'D MMM, YYYY h:mm A',
    llll: 'ddd, MMM D, YYYY h:mm A'
  },
  relativeTime: {
    // relative time format strings, keep %s %d as the same
    future: 'in %s', // e.g. in 2 hours, %s been replaced with 2hours
    past: '%s ago',
    s: 'a few seconds',
    m: 'a minute',
    mm: '%d minutes',
    h: 'an hour',
    hh: '%d hours', // e.g. 2 hours, %d been replaced with 2
    d: 'a day',
    dd: '%d days',
    M: 'a month',
    MM: '%d months',
    y: 'a year',
    yy: '%d years'
  },
  meridiem: (hour, minute, isLowercase) => {
    // OPTIONAL, AM/PM
    return hour > 12 ? 'PM' : 'AM'
  }
}

一个Day.js locale文件的模板(例如:dayjs/locale/es.js)。

import dayjs from 'dayjs'

const locale = { ... } // Your Day.js locale Object.

dayjs.locale(locale, null, true) // load locale for later use

export default locale

# 月份名称

Locale#months应该是月份名称的数组。

注意

此功能依赖UpdateLocale插件

dayjs.extend(updateLocale)

dayjs.updateLocale('en', {
  months: [
    "January", "February", "March", "April", "May", "June", "July",
    "August", "September", "October", "November", "December"
  ]
})

如果您需要更多的处理来计算月份的名称(例如,对于不同的格式有不同的语法),Locale#months可以是一个具有以下签名的函数。它应该总是返回一个月的名称。

dayjs.updateLocale("en", {
  months: function (dayjsInstance, format) {
    // dayjsInstance is the Day.js object currently being formatted
    // format is the formatting string
    if (/^MMMM/.test(format)) {
      // if the format starts with 'MMMM'
      return monthShortFormat[dayjsInstance.month()];
    } else {
      return monthShortStandalone[dayjsInstance.month()];
    }
  },
});

# 月底缩写

Locale#monthsShort应该是月份缩写的数组。

注意

此功能依赖UpdateLocale插件

dayjs.extend(updateLocale)

dayjs.updateLocale('en', {
  monthsShort: [
    "Jan", "Feb", "Mar", "Apr", "May", "Jun",
    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
  ]
})

# 工作日名称

Locale#weekdays应该是工作日名称的数组。

注意

此功能依赖UpdateLocale插件

dayjs.extend(updateLocale)

dayjs.updateLocale('en', {
  weekdays: [
    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
  ]
})

# 工作日缩写

Locale#weekdaysShort应该是工作日缩写的数组。

注意

此功能依赖UpdateLocale插件

dayjs.extend(updateLocale)

dayjs.updateLocale('en', {
  weekdaysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
})

# 工作日最短缩写

Locale#weekdaysMin应该是一个包含两个字母的工作日缩写的数组。

注意

此功能依赖UpdateLocale插件

dayjs.extend(updateLocale)

dayjs.updateLocale('en', {
  weekdaysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
})

# 相对时间

Locale#relativeTime应该是dayjs#from替换字符串的对象。

注意

此功能依赖UpdateLocale插件

dayjs.extend(updateLocale)

dayjs.updateLocale('en', {
  relativeTime: {
    future: "in %s",
    past: "%s ago",
    s: 'a few seconds',
    m: "a minute",
    mm: "%d minutes",
    h: "an hour",
    hh: "%d hours",
    d: "a day",
    dd: "%d days",
    M: "a month",
    MM: "%d months",
    y: "a year",
    yy: "%d years"
  }
})

Locale#relativeTime.future指的是未来日期的前缀/后缀。Locale#relativeTime.past指过去日期的前缀/后缀。

对于所有其他字符,单个字符表示单数,双字符表示复数。

额外的标记处理

如果地区需要对令牌进行额外处理,则可以将令牌设置为使用以下签名的函数,而不是字符串。函数应该返回一个字符串。

relativeTime: {
  ...,
  yy: function (number, withoutSuffix, key, isFuture) {
    return string;
  }
}

number参数指的是该键的单元数。对于m,数字是分钟数,等等。

如果标记不带后缀,则withoutSuffix参数为true,如果标记带后缀,则为false。(出现反向逻辑的原因是,默认行为是使用后缀显示。)

key参数引用了Locale#relativeTime对象中的替换键。(如。s m mm h等)

如果要使用将来时后缀/前缀,那么isFuture参数为真,如果要使用过去时前缀/后缀,则为假。

相对时间阈值和舍入

在使用此插件时,您可以传递一个配置对象来更新其阈值和舍入配置。

var config = {
  thresholds: [{}],
  rounding: function
}
dayjs.extend(relativeTime, config)

thresholds是一个对象数组,当一个单位被认为是一分钟、一小时等等时定义。例如,默认情况下,超过45秒被认为是一分钟,超过22小时被认为是一天,以此类推。要更改这些值,可以通过一个新的thresholds,如下所示。

// strict thresholds
var thresholds = [
  { l: 's', r: 1 },
  { l: 'm', r: 1 },
  { l: 'mm', r: 59, d: 'minute' },
  { l: 'h', r: 1 },
  { l: 'hh', r: 23, d: 'hour' },
  { l: 'd', r: 1 },
  { l: 'dd', r: 29, d: 'day' },
  { l: 'M', r: 1 },
  { l: 'MM', r: 11, d: 'month' },
  { l: 'y' },
  { l: 'yy', d: 'year' }
]

您还可以添加自己的阈值键并相应地更新区域设置。

var thresholds = [
  ...,
  { l: 'ss', r: 59, d: 'second' }
]
dayjs.updateLocale('en', {
  relativeTime: {
    ...,
    ss: "%d seconds"
  }
})

rounding是在将数字提供给区域设置中指定的相对时间格式字符串之前处理数字的Function。要更改它们,可以像这样传递一个新的rounding。

// Math.round by default
var rounding = Math.floor

# 日历

Locale#calendar应该具有以下格式化字符串。

注意

此功能依赖UpdateLocale插件 ::

dayjs.extend(updateLocale)

dayjs.updateLocale('en', {
  calendar: {
    lastDay: '[Yesterday at] LT',
    sameDay: '[Today at] LT',
    nextDay: '[Tomorrow at] LT',
    lastWeek: '[last] dddd [at] LT',
    nextWeek: 'dddd [at] LT',
    sameElse: 'L'
  }
})

每个Locale#calendar键也可以是一个回调函数,它的作用域是当前的Day.js对象,第一个参数是描述现在的Day.js对象。它应该返回一个格式化字符串。

function callback (now) {
  return '[hoy a la' + ((this.hour() !== 1) ? 's' : '') + ']' + now.format();
}
Last Updated: 2024/3/12 10:55:32