格式化时间
export function timeFormat ( dateTime = null , fmt = 'yyyy-MM-dd' ) {
if ( isEmpty ( fmt) ) fmt = 'yyyy-MM-dd'
let date = new Date ( isDate ( dateTime) ) ,
hour12 = / (a|A) / . test ( fmt) ,
ret,
opt = {
'y+' : date. getFullYear ( ) ,
'M+' : date. getMonth ( ) + 1 ,
'd+' : date. getDate ( ) ,
'h+' : Number ( date. getHours ( ) ) ,
'H+' : Number ( date. getHours ( ) ) ,
'm+' : date. getMinutes ( ) ,
's+' : date. getSeconds ( ) ,
'q+' : Math. floor ( ( date. getMonth ( ) + 3 ) / 3 ) ,
'w+' : [ '日' , '一' , '二' , '三' , '四' , '五' , '六' ] [ date. getDay ( ) ] ,
}
if ( opt[ 'h+' ] > 12 ) {
opt[ 'a+' ] = 'pm'
opt[ 'A+' ] = 'PM'
} else {
opt[ 'a+' ] = 'am'
opt[ 'A+' ] = 'AM'
}
opt[ 'h+' ] = hour12 ? opt[ 'h+' ] % 12 || 12 : opt[ 'h+' ]
for ( let k in opt) {
ret = new RegExp ( '(' + k + ')' ) . exec ( fmt)
if ( ret) {
fmt = fmt. replace (
ret[ 1 ] ,
ret[ 1 ] . length == 1
? opt[ k]
: opt[ k] . toString ( ) . padStart ( ret[ 1 ] . length, '0' )
)
}
}
return fmt
}
对时间进行星期排序
export function weeksSort ( days, title ) {
if ( isEmpty ( title) ) title = '星期'
const statusEnum = {
1 : title + '一' ,
2 : title + '二' ,
3 : title + '三' ,
4 : title + '四' ,
5 : title + '五' ,
6 : title + '六' ,
7 : title + '日' ,
}
for ( let index = 0 ; index < days. length; index++ ) {
if ( days[ index] == 0 ) days[ index] = '7'
}
days = days. sort ( )
const start = [ ]
const end = [ ]
var reload = true
for ( let index = 0 ; index < days. length; index++ ) {
const element = days[ index]
const element1 = days[ index + 1 ]
if ( reload) {
start. push ( element)
}
if ( element1 - element === 1 ) {
reload = false
continue
} else {
reload = true
end. push ( element)
}
}
var resultMsg = [ ]
for ( let index1 = 0 ; index1 < start. length; index1++ ) {
const startItem = start[ index1]
const endItem = end[ index1]
if ( endItem - startItem === 0 ) {
resultMsg. push ( statusEnum[ startItem] )
} else {
resultMsg. push ( statusEnum[ startItem] + '至' + statusEnum[ endItem] )
}
}
return resultMsg. join ( '、' )
}
计时器显示值
export function durationTime ( numberOfSeconds, fmt = 'hh:mm:ss' ) {
var sec_num = parseInt ( numberOfSeconds, 10 )
var hours = Math. floor ( sec_num / 3600 )
var minutes = Math. floor ( ( sec_num - hours * 3600 ) / 60 )
var seconds = sec_num - hours * 3600 - minutes * 60
let opt = {
'h+' : hours,
'm+' : minutes,
's+' : seconds,
}
let ret
for ( let k in opt) {
ret = new RegExp ( '(' + k + ')' ) . exec ( fmt)
if ( ret) {
fmt = fmt. replace (
ret[ 1 ] ,
ret[ 1 ] . length == 1 ? opt[ k] : ( '' + opt[ k] ) . padStart ( ret[ 1 ] . length, '0' )
)
}
}
return fmt
}
本⽉第⼀天
export function monthFirstDay ( fmt ) {
const Nowdate = new Date ( )
const MonthFirstDay = new Date ( Nowdate. getFullYear ( ) , Nowdate. getMonth ( ) , 1 )
return timeFormat ( new Date ( MonthFirstDay) , fmt)
}
多久前/后转日期
export function daysTime ( day, fmt, dateTime = null ) {
dateTime = new Date ( isDate ( dateTime) ) . getTime ( )
var targetDay = dateTime + 1000 * 60 * 60 * 24 * Number ( day)
return timeFormat ( targetDay, fmt)
}
根据天数获取日期范围
export function dateRange ( number4Days, from = 'today' , fmt) {
var startTime = 0 ,
endTime = 0
if ( ! number4Days. startTime) {
startTime = new Date ( ) . getTime ( )
endTime = new Date ( ) . getTime ( )
if ( from == 'today' ) {
endTime += 1000 * 60 * 60 * 24 * ( number4Days - 1 )
} else if ( from == 'middle' ) {
var remainder = number4Days % 2 == 0 ? 1 : 2 ,
day = Math. ceil ( number4Days / 2 )
startTime -= 1000 * 60 * 60 * 24 * day
endTime += 1000 * 60 * 60 * 24 * ( day - remainder)
} else if ( from == 'last' ) {
startTime -= 1000 * 60 * 60 * 24 * ( number4Days - 1 )
}
} else {
startTime = new Date ( number4Days. startTime) . getTime ( )
endTime = new Date ( number4Days. endTime) . getTime ( )
}
return { min : timeFormat ( startTime, fmt) , max : timeFormat ( endTime, fmt) }
}
是否今天
export function isToday ( dateTime ) {
dateTime = new Date ( isDate ( dateTime) )
var todaysDate = new Date ( )
return dateTime. setHours ( 0 , 0 , 0 , 0 ) == todaysDate. setHours ( 0 , 0 , 0 , 0 )
}
本⽉第⼀天
export function monthFirstDay ( fmt ) {
const Nowdate = new Date ( )
const MonthFirstDay = new Date ( Nowdate. getFullYear ( ) , Nowdate. getMonth ( ) , 1 )
return timeFormat ( new Date ( MonthFirstDay) , fmt)
}
本⽉最后⼀天
export function monthLastDay ( fmt ) {
const Nowdate = new Date ( )
const MonthNextFirstDay = new Date (
Nowdate. getFullYear ( ) ,
Nowdate. getMonth ( ) + 1 ,
1
)
const MonthLastDay = new Date ( MonthNextFirstDay - 86400000 )
return timeFormat ( new Date ( MonthLastDay) , fmt)
}
本周第⼀天
export function weekFirstDay ( fmt ) {
const Nowdate = new Date ( )
const WeekFirstDay = new Date ( Nowdate - ( Nowdate. getDay ( ) - 1 ) * 86400000 )
return timeFormat ( new Date ( WeekFirstDay) , fmt)
}
本周最后⼀天
export function weekLastDay ( fmt ) {
const Nowdate = new Date ( )
const WeekFirstDay = new Date ( Nowdate - ( Nowdate. getDay ( ) - 1 ) * 86400000 )
const WeekLastDay = new Date ( ( WeekFirstDay / 1000 + 6 * 86400 ) * 1000 )
return timeFormat ( new Date ( WeekLastDay) , fmt)
}
当前月份的天数
export function getMonthDays ( date = Date. now ( ) ) {
date = new Date ( isDate ( date) )
var d = new Date ( date. getFullYear ( ) , date. getMonth ( ) + 1 , 0 )
return d. getDate ( )
}
日期是今年的日期
export function isThisYear ( dateTime ) {
var tYear = new Date ( ) . getFullYear ( )
var tYearTime = new Date ( tYear, 0 , 1 ) . getTime ( )
return new Date ( isDate ( dateTime) ) >= tYearTime
}
判断是否日期格式
export function isDate ( date ) {
if ( isEmpty ( date) ) date = new Date ( )
let newD = '' + date
if ( ! isNaN ( newD) ) newD = newD. toString ( ) . padEnd ( 13 , '0' )
else newD = Date. parse ( newD)
return ! isNaN ( newD) ? Number ( newD) : Number ( new Date ( date) )
}
isEmpty
function isEmpty ( value, type = 1 ) {
switch ( typeof value) {
case 'undefined' :
return true
case 'string' :
if ( value. replace ( / (^[ \t\n\r]*)|([ \t\n\r]*$) / g , '' ) . length == 0 )
return true
break
case 'boolean' :
if ( ! value) return true
break
case 'number' :
if ( type == 0 ) return false
else if ( 0 === value || isNaN ( value) ) return true
break
case 'object' :
if ( null === value || value. length === 0 ) return true
for ( var i in value) {
return false
}
return true
}
return false
}