@mypui/myp-ui
Version:
第一个高效且强悍的nvue开源组件库。做最好、最顺手的nvue组件库
309 lines (292 loc) • 8.45 kB
JavaScript
// 获取某年的某月共多少天
export function getMonthDays(year, month) {
return new Date(year, month, 0).getDate()
}
// 获取某一天(年月日)是星期几
export function getDayWeekday(year, month, date) {
const dateNow = new Date(year, parseInt(month) - 1, date)
// 0-6, 0 is sunday
return dateNow.getDay()
}
// 获取某一天所在周的日期
export function getWeekDatesForDate(date) {
const timeStamp = date.getTime()
const currentDay = date.getDay()
let dates = []
for (var i = 0; i < 7; i++) {
const _i = i - (currentDay + 6) % 7
const _isToday = _i === 0
const _date = new Date(timeStamp + 24 * 60 * 60 * 1000 * _i)
dates.push({
theDay: _isToday, // 只是指当前查询的时间,在那一周的哪一天. 并不是指查询的这一天是否是今天
date: _date,
today: isToday(_date) // 是否是今天
})
}
return dates
}
// 获取当前周的日期
export function getWeekDates() {
const new_Date = new Date()
return getWeekDatesForDate(new_Date)
}
// 获取某一天所在周的日期
export function getWeekDatesForYMD(year, month, date) {
const dateNow = new Date(year, parseInt(month) - 1, date)
return getWeekDatesForDate(dateNow)
}
// 获取 开始日期 之后 第n周 的 日期
export function getDatesAfterWeeks(start, diff) {
const _arr = start.split('-')
const y = _arr[0]
const m = _arr[1]
const d = _arr[2]
const _start = new Date(y, parseInt(m) - 1, d)
const timeStamp = _start.getTime()
const date = new Date(timeStamp + diff * 7 * 24 * 60 * 60 * 1000)
return getWeekDatesForDate(date)
}
// 获取当前是开始日期之后的第几周,如果大于total,则表示已经结束过时,如果小于0,则表示start还没有到来。
// 我们这里需要注意的是,比如 开始日期是星期四(没有给出星期一的日期),下周的星期一应该是第2周,而不是还在第一周。(我们这里不仅仅只是差值周数计算,还需要受实际周的限制)
// 不能只是计算差值,如果给出的开始日期是星期一的,差值计算正确,如果不是,则需要考虑开始日期的星期
export function getCurrentWeekNumber(start, total) {
const _arr = start.split('-')
const y = _arr[0]
const m = _arr[1]
const d = _arr[2]
const _start = new Date(y, parseInt(m) - 1, d)
let _timestamp = _start.getTime()
let day = _start.getDay() // 星期几
day = (day + 6) % 7 // 将星期几转化为距离星期一多少天
// 我们将开始时间修正到那一周的星期一
// 这里我们将星期天作为最后一天,星期一作为第一天
_timestamp = _timestamp - day * (24 * 60 * 60 * 1000)
// current
const dt = new Date()
const _y = dt.getFullYear()
const _m = dt.getMonth()
const _d = dt.getDate()
const today = new Date(_y, _m, _d)
const todayStamp = today.getTime()
const diff = todayStamp - _timestamp
if (diff < 0) {
// start还没有开始,未来返回-1
return -1
}
const weekStamp = 7 * 24 * 60 * 60 * 1000
let weekDiff = parseInt(diff / weekStamp)
const more = diff % weekStamp
// if (more >= 24 * 60 * 60 * 1000) {
// weekDiff += 1
// }
// wo always need to plus 1 for weekDiff
const weekNumber = weekDiff + 1
if (weekNumber > total) {
// 已经过期
return -2
}
return weekNumber
}
// 查询某日期是否是今天
export function isToday(date) {
const dt = new Date();
const y = dt.getFullYear(); // 年
const _y = date.getFullYear();
const m = dt.getMonth(); // 月份从0开始的
const _m = date.getMonth();
const d = dt.getDate(); //日
const _d = date.getDate();
return (_y + '-' + _m + '-' + _d) === (y + '-' + m + '-' + d);
}
// 获取 某年某月某日 是在 那一月 的第几周
export function getMonthWeek(year, month, date) {
/*
month = 6 - w = 当前周的还有几天过完(不算今天)
year + month 的和在除以7 就是当天是当前月份的第几周
*/
let dateNow = new Date(year, parseInt(month) - 1, date);
let w = dateNow.getDay(); //星期数
let d = dateNow.getDate();
return Math.ceil((d + 6 - w) / 7);
}
// 获取 某年某月某日 是在 那一年 的第几周
export function getYearWeek(year, month, date) {
/*
dateNow是当前日期
dateFirst是当年第一天
dataNumber是当前日期是今年第多少天
用dataNumber + 当前年的第一天的周差距的和在除以7就是本年第几周
*/
let dateNow = new Date(year, parseInt(month) - 1, date);
let dateFirst = new Date(year, 0, 1);
let dataNumber = Math.round((dateNow.valueOf() - dateFirst.valueOf()) / 86400000);
return Math.ceil((dataNumber + ((dateFirst.getDay() + 1) - 1)) / 7);
}
// 获取今天是星期几
export function getCurrentWeekday() {
const myDate = new Date()
let days = myDate.getDay()
const number = days
switch (days) {
case 1:
days = '周一'
break
case 2:
days = '周二'
break
case 3:
days = '周三'
break
case 4:
days = '周四'
break
case 5:
days = '周五'
break
case 6:
days = '周六'
break
case 0:
days = '周日'
break
}
return {
number: number,
weekday: days
}
}
// 获取今天的 年月日
export function getCurrentYearMonthDay() {
const date = new Date()
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
return {
year: year,
month: month,
day: day
}
}
// 时间格式化。可以作为过滤器直接使用。
/**
* Parse the time to string
* @param {(Object|string|number)} time
* @param {string} cFormat
* @returns {string}
*/
export function parseTime(time, cFormat) {
if (arguments.length === 0) {
return null
}
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value]
}
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
// time ago,时间格式化。可以作为过滤器直接使用。
/**
* @param {number|string|object} time
* @param {string} option
* @returns {string}
*/
export function formatTime(time, option) {
if (arguments.length === 0) {
return null
}
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const d = date
const now = Date.now()
const diff = (now - d) / 1000
if (diff < 30) {
return '刚刚'
} else if (diff < 3600) {
// less 1 hour
return Math.ceil(diff / 60) + '分钟前'
} else if (diff < 3600 * 24) {
return Math.ceil(diff / 3600) + '小时前'
} else if (diff < 3600 * 24 * 2) {
return '1天前'
}
if (option) {
return parseTime(time, option)
} else {
return (
d.getMonth() +
1 +
'月' +
d.getDate() +
'日' +
d.getHours() +
'时' +
d.getMinutes() +
'分'
)
}
}
// 只能比较同一天之内的时间,不跨天比较
// 24小时制,最大时间23:59
export function inTimePeriod(start, end) {
const now = new Date()
const nowH = now.getHours() * 1
const nowM = now.getMinutes() * 1
const _now = nowH * 60 + nowM
const startArr = start.split(":")
const startH = startArr[0] * 1
const startM = startArr[1] * 1
const _start = startH * 60 + startM
const endArr = end.split(":")
const endH = endArr[0] * 1
const endM = endArr[1] * 1
const _end = endH * 60 + endM
if (_now > _end) {
// 已经过时
return -1
}
if (_now >= _start && _now <= _end) {
// 正在进行
return 0
}
// 尚未开始
return 1
}