微信公众号前端模版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

238 lines
6.4 KiB

// 公共导入模块
/**
* 时间转换
* @param {Date} date 日期
* @param {String} fmt 格式(yyyy-MM-dd hh:mm:ss)
*/
function format(date, fmt) {
if (fmt.indexOf('mm-dd') !== -1) return console.error('Date format 格式mm请使用大写MM')
date = !date ? new Date() : new Date(date)
var o = {
'M+': date.getMonth() + 1, //月份
'd+': date.getDate(), //日
'H+': date.getHours(), //小时
'h+': date.getHours(), //小时
'm+': date.getMinutes(), //分
's+': date.getSeconds(), //秒
'q+': Math.floor((date.getMonth() + 3) / 3), //季度
S: date.getMilliseconds() //毫秒
}
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
for (var k in o) {
if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
}
return fmt
}
/**
* 时间转换
* @param {Date} date 日期
* @param {String} type 格式
*/
function dateFormat(date, type) {
var Y, M, D
date = !date ? new Date() : new Date(date)
Y = date.getFullYear()
M = date.getMonth() + 1
D = date.getDate()
if (M < 10) M = '0' + M
if (D < 10) D = '0' + D
if (!type || type === 'yyyy-MM-dd') return Y + '-' + M + '-' + D
if (type === 'yyyy-mm-dd') return console.error('请用yyyy-MM-dd!')
if (type === 'MM-dd') return M + '-' + D
if (type === 'txt') return Y + '年' + M + '月' + D + '日'
}
/**
* 计算周期
* @param {Number} begin 从第几天开始0:当天1:明天以此类推
* @param {Number} sum 获取几天
*/
function getWeek(date, begin, sum) {
var weeks = []
var weekItem, week
var index = 0
var day
for (var i = begin; i <= sum; i++) {
day = new Date(new Date(date).getTime() + i * 24 * 60 * 60 * 1000)
if (day.getDay() === 0) week = '周日'
if (day.getDay() === 1) week = '周一'
if (day.getDay() === 2) week = '周二'
if (day.getDay() === 3) week = '周三'
if (day.getDay() === 4) week = '周四'
if (day.getDay() === 5) week = '周五'
if (day.getDay() === 6) week = '周六'
weekItem = {
index: index,
date: this.format(day, 'yyyy-MM-dd'),
dateTitle: this.format(day, 'MM-dd'),
weekTitle: week
}
weeks.push(weekItem)
index++
}
return weeks
}
/**
* 判断日期是否是今天
* @param {String} date 被判断日期
* @param {Date} today 今天
*/
function isToday(date, today) {
date = new Date(date.toString().replace(/-/g, '/'))
if (!today) today = new Date()
today = new Date(today)
return date.setHours(0, 0, 0, 0) == today.setHours(0, 0, 0, 0)
}
/**
* 判断日期是否大于当前日期(不含时间)
* @param {String} date 被判断日期
* @param {Date} curDate 当前日期 可选默认是今天
*/
function isFutureDay(date, curDate) {
var day = new Date(Date.parse(date.replace(/-/g, '/')))
if (!curDate) curDate = new Date()
console.log(day, curDate)
return day > curDate
}
/**
* 判断是否在某天的某个时间范围内
* @param {String} begTime 开始时间(例如00:00)
* @param {String} endTime 结束时间(例如17:30)
* @param {String} date 被判断时间默认是今天
*/
function inTimeRange(begTime, endTime, date) {
date = !date ? new Date() : new Date(date) // 判断是哪天,默认今天
var curDay = new Date(date.toString().replace(/-/g, '/'))
var todaysDate = new Date()
if (curDay.setHours(0, 0, 0, 0) !== todaysDate.setHours(0, 0, 0, 0)) {
return false
}
var strb = begTime.split(':')
if (strb.length !== 2 && strb.length !== 3) {
return false
}
var stre = endTime.split(':')
if (stre.length !== 2 && stre.length !== 3) {
return false
}
var b = new Date(date)
var e = new Date(date)
var n = new Date(date)
b.setHours(strb[0])
b.setMinutes(strb[1])
b.setSeconds(0)
e.setHours(stre[0])
e.setMinutes(stre[1])
e.setSeconds(59)
return n.getTime() - b.getTime() > 0 && n.getTime() - e.getTime() < 0
}
/**
* 获取定时周期
* @param {Number} weekNum 指定星期1-7
* @param {Number} begNum 隔几天默认相隔一天例如预约挂号
* @param {Date} date 日期
*/
function getTimeEndPointWeek(weekNum, begNum, date) {
// 云龙
if (typeof weekNum !== 'number' || weekNum === 0) weekNum = 7 // 默认星期天
if (typeof begNum !== 'number') begNum = 1 // 默认从第二天开始
if (!date) date = new Date()
date = new Date(date)
return this.getWeek(date, begNum, weekNum - date.getDay())
}
/**
* 以一个时间点为基准计算相邻日期
* @param {Date} date 时间点
* @param {Number} days 相差天数可以为负数
* @param {String} fmt 格式yyyy-MM-dd
*/
function computDate(date, days, fmt) {
var day = new Date(new Date(date).getTime() + days * 24 * 60 * 60 * 1000)
if (!fmt) return day
return format(new Date(day), fmt)
}
Object.freeze(window.DateUtil = {
format,
dateFormat,
getWeek,
isToday,
isFutureDay,
inTimeRange,
getTimeEndPointWeek,
computDate
})
//-----------------------------------------------------------------------------------------
/**
* 根据URL获取URL中的参数值
*
* @param {String} variable
* @returns 参数值
*/
function getQueryVar(variable) {
var query = decodeURI(window.location.search).substring(1)
var vars = query.split('&')
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=')
if (pair[0] === variable) {
return pair[1] === undefined || pair[1] === 'undefined' ? '' : pair[1]
}
}
return ''
}
/**
* 根据URL获取html页面名称
* @returns 页面名称
*/
function getHtmlFileName() {
var path = window.location.href
path = path.substring(0, path.lastIndexOf('.html'))
path = path.substring(path.lastIndexOf('/') + 1)
return path + '.html'
}
/**
* 获取web项目路径
*
* @param {String} isOrigin 是否含有域名
* @returns 路径
*/
function getWebPath(isOrigin) {
var pathname = window.location.pathname
pathname = pathname.substring(0, pathname.lastIndexOf('/'))
return !isOrigin ? pathname : window.location.origin + pathname
}
Object.freeze(window.URLUtil = {
getWebPath,
getQueryVar,
getHtmlFileName
})