基础学习: dayjs
一个在某些场景上代替 moment 的库
cheatsheet
功能 | 代码 |
---|---|
取当地时间 |
|
clone |
|
validate |
|
格式化 |
|
项目之 bootstrap.ts |
|
插件
编写一些好用的插件。
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
}
}
types
{ //tsconfig.json
"compilerOptions": {
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
}
}
带 typescript 的插件
一个实际的
dayjs
插件。
import { PluginFunc } from 'dayjs';
// https://github.com/iamkun/dayjs/issues/1605
// https://github.com/aric-notes/dayjs-notes/blob/main/src/plugins/my-plugin.js
const CUSTOM_FORMATS = {
date: 'YYYY-MM-DD',
time: 'hh:mm:ss',
datetime: 'YYYY-MM-DD HH:mm:ss',
month: 'YYYY-MM',
dbdt: 'YYYYMMDD_hhmmss',
};
const customFormatsPlugin: PluginFunc = (option, dayjsClass, dayjsFactory) => {
const oldFormat = dayjsClass.prototype.format;
dayjsClass.prototype.format = function(formatStr, ...args) {
const isCustomFormat = Boolean(formatStr && formatStr in CUSTOM_FORMATS);
if (isCustomFormat) {
return oldFormat.call(this, CUSTOM_FORMATS[formatStr!], ...args);
}
return oldFormat.call(this, formatStr, ...args);
};
};
export default customFormatsPlugin;