增加时间组件
parent
6a75f89e4a
commit
04e1c9650c
|
@ -16,12 +16,13 @@
|
||||||
|
|
||||||
- wkit 针对`web components`的核心封装库, 以数据驱动, 可以更方便的开发 wc 组件
|
- wkit 针对`web components`的核心封装库, 以数据驱动, 可以更方便的开发 wc 组件
|
||||||
|
|
||||||
### 开发进度 && 计划 (41/55)
|
### 开发进度 && 计划 (42/56)
|
||||||
|
|
||||||
- [x] `wc-card` 卡片组件
|
- [x] `wc-card` 卡片组件
|
||||||
- [x] `wc-space` 间隔组件
|
- [x] `wc-space` 间隔组件
|
||||||
- [x] `wc-avatar` 头像组件
|
- [x] `wc-avatar` 头像组件
|
||||||
- [x] `wc-badge` 徽标组件
|
- [x] `wc-badge` 徽标组件
|
||||||
|
- [x] `wc-time` 时间格式化组件
|
||||||
- [x] `wc-drawer` 抽屉组件
|
- [x] `wc-drawer` 抽屉组件
|
||||||
- [x] `wc-collapse` 折叠组件
|
- [x] `wc-collapse` 折叠组件
|
||||||
- [ ] `wc-dropdown` 下拉菜单组件
|
- [ ] `wc-dropdown` 下拉菜单组件
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
/**
|
||||||
|
* {}
|
||||||
|
* @author yutent<yutent.io@gmail.com>
|
||||||
|
* @date 2023/03/21 16:14:10
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { css, html, Component } from 'wkit'
|
||||||
|
|
||||||
|
const ONE_MINUTE = 60 * 1000
|
||||||
|
const ONE_HOUR = ONE_MINUTE * 60
|
||||||
|
const SIX_HOURS = ONE_HOUR * 6
|
||||||
|
const ONE_DAY = ONE_HOUR * 24
|
||||||
|
const TWO_DAY = ONE_DAY * 2
|
||||||
|
const ONE_WEEK = ONE_DAY * 7
|
||||||
|
const TODAY = new Date().setHours(0, 0, 0, 0) // 今天凌晨0点整
|
||||||
|
const THIS_YEAR = new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0) // 今年
|
||||||
|
const LAST_YEAR = new Date(new Date().getFullYear() - 1, 0, 1, 0, 0, 0, 0) // 去年
|
||||||
|
|
||||||
|
class Time extends Component {
|
||||||
|
static props = {
|
||||||
|
stamp: 'num!0'
|
||||||
|
}
|
||||||
|
|
||||||
|
get #value() {
|
||||||
|
let n = new Date().setMilliseconds(0) // 现在
|
||||||
|
let s = this.stamp || n
|
||||||
|
let d
|
||||||
|
|
||||||
|
if ((s + '').length === 10) {
|
||||||
|
s *= 1000
|
||||||
|
}
|
||||||
|
d = new Date(s)
|
||||||
|
|
||||||
|
this.title = d.toLocaleString()
|
||||||
|
|
||||||
|
if (s > n - ONE_MINUTE) {
|
||||||
|
return '刚刚'
|
||||||
|
}
|
||||||
|
if (s > n - ONE_HOUR) {
|
||||||
|
return `${~~(s / ONE_MINUTE)}分钟前`
|
||||||
|
}
|
||||||
|
if (s > n - SIX_HOURS) {
|
||||||
|
return `${~~(s / ONE_HOUR)}小时前`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s >= TODAY - TWO_DAY) {
|
||||||
|
let h = d.getHours()
|
||||||
|
let _t = h < 6 ? '凌晨' : h < 12 ? '上午' : h > 18 ? '晚上' : '下午'
|
||||||
|
|
||||||
|
if (s >= TODAY) {
|
||||||
|
return `${_t}${h % 12}点${d.getMinutes()}分`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s >= TODAY - ONE_DAY) {
|
||||||
|
return `昨天${_t}${h % 12}点`
|
||||||
|
}
|
||||||
|
|
||||||
|
return `前天${_t}`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s >= TODAY - ONE_WEEK) {
|
||||||
|
return `${~~((n - s) / ONE_DAY)}天前`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s > THIS_YEAR) {
|
||||||
|
return `${d.getMonth() + 1}月${d.getDate()}日`
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s > LAST_YEAR) {
|
||||||
|
return `去年${d.getMonth() + 1}月${d.getDate()}日`
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${d.getFullYear()}年${d.getMonth() + 1}月`
|
||||||
|
}
|
||||||
|
|
||||||
|
static styles = [
|
||||||
|
css`
|
||||||
|
:host {
|
||||||
|
display: inline-flex;
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--color-dark-1);
|
||||||
|
}
|
||||||
|
time {
|
||||||
|
-webkit-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
]
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return html`<time>${this.#value}</time>`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Time.reg('time')
|
Loading…
Reference in New Issue