Files
akmon/uni_modules/lime-dayuts/readme.md
2026-01-20 08:04:15 +08:00

441 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# lime-dayuts 日期库
- lime-dayuts 是dayjs的uts版一个轻量的处理时间和日期的 UTS 库几乎和dayjs保持一样的API
## 文档
[dayuts](https://limex.qcoon.cn/uts/dayuts.html)
## 安装
插件市场导入插件即可
## 使用
```ts
import {dayuts} from '@/uni_modules/lime-dayuts';
dayuts().format() // 2024-03-25T02:10:16+08:00
```
## 解析
接受 `string``number``Date``Dayuts`等值传入,返回
### 当前时间
空值 `dayuts()` 将返回一个包含当前日期和时间的 `Dayuts` 对象。
```ts
dayuts()
```
### 字符串
```ts
dayuts('2024-03-04T16:00:00.000Z')
dayuts('2024-03-13 19:18:17.040+02:00')
dayuts('2024-03-13 19:18')
dayuts('1748750498228')
```
### 字符串+格式
```ts
dayuts('1970-00-00', 'YYYY-MM-DD')
```
#### 支持的解析占位符列表
| 输入 | 示例 | 描述 |
| ------ | ---------------- | --------------------------------- |
| `YY` | 01 | 两位数的年份 |
| `YYYY` | 2001 | 四位数的年份 |
| `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 | 上午或下午,小写字母 |
| `ddd` | 周一 | 周,需要设置`locale = 'zh-cn'` , 默认为英文 |
| `dddd` | 星期一 | 星期 ,需要设置`locale = 'zh-cn'`, 默认为英文 |
### Unix 时间戳 (毫秒)
```ts
dayuts(1318781876406)
```
### Date 对象
```ts
dayuts(new Date(2018, 8, 18))
```
### 数组
```ts
dayuts([2010, 1, 14, 15, 25, 50, 125]);
```
## 取值/赋值
在设计上 Dayuts 的 getter 和 setter 使用了相同的 API也就是说不传参数调用方法即为 getter调用并传入参数为 setter。
### 毫秒 Millisecond
获取或设置毫秒。传入0到999的数字。 如果超出这个范围,它会进位到秒。
```ts
dayuts().millisecond() // gets current millisecond
dayuts().millisecond(1) // returns new dayuts
```
### 秒 Second
获取或设置秒。传入0到59的数字。 如果超出这个范围,它会进位到分钟。
```ts
dayuts().second() // gets current second
dayuts().second(1) // returns new dayuts
```
### 分 Minute
获取或设置分钟。传入0到59的数字。 如果超出这个范围,它会进位到小时。
```ts
dayuts().minute() // gets current minute
dayuts().minute(1) // returns new dayuts
```
### 时 Hour
获取或设置小时。传入0到23的数字。 如果超出这个范围,它会进位到天数。
```ts
dayuts().hour() // gets current hour
dayuts().hour(12) // returns new dayuts
```
### 一个月中的第几天 Date of Month
获取或设置一个月中的某一天。接受从1到31的数字。如果超出范围它将溢出到月份
```ts
dayuts().date() // gets current date
dayuts().date(12) // returns new dayuts
```
### 一周中的第几天 Day of Week
获取或设置一周中的某一天。接受从0星期日到6星期六的数字。如果超出范围它将溢出到其他周
```ts
dayuts().day() // gets current day
dayuts().day(0) // returns new dayuts
```
### 一年的第几天 Day of Year
获取或设置年份里第几天。传入1到366的数字。如果超出这个范围它会进位到下一年。
```ts
dayuts().dayOfYear()
dayuts().dayOfYear(365) // returns new dayuts
```
### 月 Month
获取或设置月份。传入0到11的 number。 如果超出这个范围,它会进位到年份。
```ts
dayuts().month() // gets current month
dayuts().month(0) // returns new dayuts
```
### 年 Year
获取或设置年份。
```ts
dayuts().year() // gets current year
dayuts().year(2000) // returns new dayuts
```
### Get/Set
获取和设置相应信息。
```ts
dayuts().get('year')
dayuts().get('month') // start 0
dayuts().get('date')
dayuts().get('hour')
dayuts().get('minute')
dayuts().get('second')
dayuts().get('millisecond')
dayuts().set('date', 1)
dayuts().set('month', 3) // 四月
dayuts().set('second', 30)
```
## 操作
### 增加 Add
返回增加一定时间的复制的 dayuts 对象。
```ts
dayuts().add(7, 'day')
```
### 减去 Subtract
返回增加一定时间的复制的 dayuts 对象。
```ts
dayuts().subtract(7, 'year')
```
#### 所有可用单位的列表
| 单位 | 缩写 | 描述 |
| ------------- | --------- | ---------------------------------------- |
| `day` | `d` | 日 |
| `week` | `w` | 周 |
| `month` | `M` | 月 |
| `year` | `y` | 年 |
| `hour` | `h` | 小时 |
| `minute` | `m` | 分钟 |
| `second` | `s` | 秒 |
| `millisecond` | `ms` | 毫秒 |
### 时间的开始 Start of Time
设置到一个时间的开始。
```ts
dayuts().startOf('year')
```
### 时间的结束 End of Time
设置到一个时间的末尾。
```ts
dayuts().endOf('month')
```
#### 所有可用单位的列表
| 单位 | 缩写 | 描述 |
| ------------- | --------- | ----------------------------------------- |
| `year` | `y` | 当年1月1日 00:00 |
| `quarter` | `Q` | 当前季度的开始月份的第一天00:00 @>>QuarterOfYear|
| `month` | `M` | 当月的第一天00:00 |
| `week` | `w` | 当周的第一天00:00 (根据地区设置) |
| `date` | `D` | 今天 00:00 |
| `day` | `d` | 今天 00:00 |
| `hour` | `h` | 现在但是分钟、秒和毫秒都为0 |
| `minute` | `m` | 现在但是秒和毫秒都为0 |
| `second` | `s` | 现在但是毫秒为0 |
## 显示
### 格式化 Format
根据传入的占位符返回格式化后的日期。
将字符放在方括号中,即可原样返回而不被格式化替换 (例如, [MM])
```ts
dayuts().format() // 默认返回的是 ISO8601 格式字符串 '2024-03-28T01:33:29+08:00'
// app 暂不支持
dayuts('2019-01-25').format('[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]')
// 'YYYYescape 2019-01-25T00:00:00-02:00Z'
dayuts('2019-01-25').format('DD/MM/YYYY') // '25/01/2019'
```
### 相对当前时间(前) Time from now
返回现在到当前实例的相对时间。
```ts
dayuts('1999-01-01').fromNow() // 25 years ago
//如果传入 true则可以获得不带后缀的值。
dayuts('1999-01-01').fromNow(true) // 25 years
```
### 相对指定时间(前) Time from X
返回 X 到当前实例的相对时间。
```ts
dayuts('1999-01-01').from(dayuts()) // 25 years ago
//如果传入 true则可以获得不带后缀的值。
dayuts('1999-01-01').from(dayuts(), true) // 25 years
```
### 相对当前时间(后) Time to now
返回当前实例到现在的相对时间。
```ts
dayuts('1999-01-01').toNow() // in 25 years
//如果传入 true则可以获得不带后缀的值。
dayuts('1999-01-01').toNow(true) // 25 years
```
### 相对指定时间(后) Time to X
返回当前实例到 X 的相对时间。
```ts
dayuts('1999-01-01').to(dayuts()) // in 25 years
//如果传入 true则可以获得不带后缀的值。
dayuts('1999-01-01').to(true) // 25 years
```
### 差异 Diff
返回指定单位下两个日期时间之间的差异。
```ts
dayuts('2019-01-25')
.diff(dayuts('2018-06-05')) // 20214000000 默认单位是毫秒
// 要获取其他单位下的差异,则在第二个参数传入相应的单位。
dayuts('2019-01-25')
.diff(dayuts('2018-06-05'), 'month') // 7
// 如果要得到一个浮点数,将 true 作为第三个参数传入。
dayuts('2019-01-25')
.diff(dayuts('2018-06-05'), 'month', true) // 7.645161290322581
```
### Unix 时间戳 (毫秒)
返回当前实例的 UNIX 时间戳13位数字毫秒
```ts
dayuts('2019-01-25').valueOf() //1548345600000
```
### Unix 时间戳
返回当前实例的 UNIX 时间戳10位数字秒。
```ts
dayuts('2019-01-25').unix() // 1548345600
```
### 月份的天数
获取当前月份包含的天数。
```ts
dayuts('2019-01-25').daysInMonth() //31
```
### 转Date
从 Dayuts 对象中获取原生的 Date 对象
```ts
dayuts().toDate()
```
### 转Array
返回一个包含各个时间信息的 Array
```ts
dayuts().toArray() //[2024, 2, 29, 2, 57, 28, 775]
```
### 转JSON
序列化为 `ISO 8601` 格式的字符串
```ts
dayuts('2019-01-25').toJSON() // '2019-01-25T02:00:00.000Z'
```
### 转Object
返回包含时间信息的 Object
```ts
dayuts('2019-01-25').toObject() // { years: 2019, months: 0, date: 25, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 }
```
### 转字符串
返回包含时间信息的 string
```ts
dayuts('2019-01-25').toString() // Fri Mar 29 2024 03:20:40 GMT+0800
```
## 查询
### 是否在前 Is Before
这表示 Dayuts 对象是否在另一个提供的日期时间之前。
```ts
// 默认使用毫秒比较
dayuts().isBefore(dayuts('2011-01-01')) // false
// 如果想使用除了毫秒以外的单位进行比较,则将单位作为第二个参数传入。 在这种情况下,会使用传入的单位以及比其范围大的单位进行比较。
dayuts().isBefore('2011-01-01', 'month') // false
```
### 是否在后 Is After
这表示 Dayuts 对象是否在另一个提供的日期时间之后。
```ts
// 默认使用毫秒比较
dayuts().isAfter(dayuts('2011-01-01')) // true
// 如果想使用除了毫秒以外的单位进行比较,则将单位作为第二个参数传入。 在这种情况下,会使用传入的单位以及比其范围大的单位进行比较。
dayuts().isAfter('2011-01-01', 'month') // true
```
### 是否相同 Is Same
这表示 Dayuts 对象是否和另一个提供的日期时间相同。
```ts
// 默认使用毫秒比较
dayuts().isSame(dayuts('2011-01-01')) // false
// 当使用第二个参数时,将会连同去比较更大的单位。 如传入 month 将会比较 month 和 year。 传入 day 将会比较 day、 month和 year。
dayuts().isSame('2011-01-01', 'year') // false
```
### 是否相同或在前 Is Same or Before
这表示 Dayuts 对象是否在另一个提供的日期时间之前。
```ts
// 默认使用毫秒比较
dayuts().isSameOrBefore(dayuts('2011-01-01')) // false
// 如果想使用除了毫秒以外的单位进行比较,则将单位作为第二个参数传入。 在这种情况下,会使用传入的单位以及比其范围大的单位进行比较。
dayuts().isSameOrBefore('2011-01-01', 'month') // false
```
### 是否相同或在后 Is Same or After
这表示 Dayuts 对象是否和另一个提供的日期时间相同或在其之后。
```ts
// 默认使用毫秒比较
dayuts().isSameOrAfter(dayuts('2011-01-01')) // true
// 如果想使用除了毫秒以外的单位进行比较,则将单位作为第二个参数传入。
dayuts().isSameOrAfter('2011-01-01', 'month') // true
```
### 区间 Is Between
这表示 Dayuts 对象是否在其他两个的日期时间之间
```ts
// 默认使用毫秒比较
dayuts('2010-10-20').isBetween('2010-10-19', dayuts('2010-10-25'))// true
// 如果想使用除了毫秒以外的单位进行比较,则将单位作为第三个参数传入。 在这种情况下,会使用传入的单位以及比其范围大的单位进行比较。
dayuts().isBetween('2010-10-19', '2010-10-25', 'month') // false
// 第四个参数是设置包容性。 [ 表示包含。 ( 表示排除。
// 要使用包容性参数,必须同时传入两个指示符。
dayuts('2016-10-30').isBetween('2016-01-01', '2016-10-30', 'day', '[)')
```
### 是否闰年 Is Leap Year
查询 Dayuts 对象的年份是否闰年
```ts
dayuts().isLeapYear()// true
```
### 今日 Is Today
查询 Dayuts 对象的日期是不是今日
```ts
dayuts().isToday()// true
```
## 国际化
目前内置了中英两种语言,欢迎提交 Pull Request 来增加新的语言
### 改变语言配置 (全局)
更改全局的语言配置并不会影响之前存在的实例
```ts
import {dayutsIntl} from '@/uni_modules/lime-dayuts'
dayutsIntl.locale = 'zh-cn' // 全局使用简体中文
dayutsIntl.locale = 'en' // 全局使用默认的英文
```
### 改变语言配置 (当前实例)
```
dayuts().locale('zh-cn').format()
```