一、创建日期对象
Date 对象用于处理日期和时间,可以通过 new 关键词来定义 Date 对象。
1.创建当前日期时间对象
var d = new Date();
// Tue Jun 02 2020 10:10:01 GMT+0800 (中国标准时间)
2.创建指定日期时间对象
方法1:参数为毫秒数[Number]
// 方法1:参数为毫秒数[Number]
new Date(milliseconds) // 参数为 1970 年 1 月 1 日 00:00:00至指定日期的毫秒数
var d = new Date(1591064231000)
// Tue Jun 02 2020 10:17:11 GMT+0800 (中国标准时间)
方法2:参数为时间字符串[String]
// 方法2:参数为时间字符串[String]
new Date("month dd,yyyy hh:mm:ss"); // 字符串逗号后可加可不加空格
new Date("month dd,yyyy");
/*
month:用英文 表示月份名称,从January到 December
dd:表示一个 月中的第几天,从1到31
yyyy:四位数表示的年份
hh:小时数,从0(午夜)到23(晚11点)
mm: 分钟数,从0到59的整数
ss:秒数,从0到59的整数
*/
var d = new Date('June 1, 2020 7:1:1')
// Mon Jun 01 2020 07:01:01 GMT+0800 (中国标准时间)
var dt = new Date('January 8, 2018')
// Mon Jan 08 2018 00:00:00 GMT+0800 (中国标准时间)
方法3:参数为表示年月的整数[Number]
new Date(year, mth, day, hours, minutes, seconds, milliseconds)
new Date(year,mth[,day[,hour[,minutes[,seconds[,milliseconds]]]]]) // 至少要有前两个参数
/*
特别注意:
mth:用整数表示月份,从(1月)0到11(12月)
*/
var d = new Date(2020, 5, 2, 9, 38, 12, 9)
// Tue Jun 02 2020 09:38:12 GMT+0800 (中国标准时间)
var time = new Date(2008, 7)
// Fri Aug 01 2008 00:00:00 GMT+0800 (中国标准时间)
二、获取时间日期
1.获取某一时间的各单位时间
getFullYear() 根据本地时间返回指定日期对象的 年份(四位数年份时 返回四位数字)
getMonth() xx月,根据本地时间返回指定日期对象的 月份(0-11)
getDate() xx号,根据本地时间返回指定日期对象的 月份中的第几天(1-31)
getDay() 星期x,根据本地时间返回指定日期对象的 星期中的第几天(0-6)
getHours() 根据本地时间返回指定日期对象的 小时(0-23)
getMinutes() 根据本地时间返回指定日期对象的 分钟(0-59)
getSeconds() 根据本地时间返回指定日期对象的 秒数(0-59)
getMilliseconds() 根据本地时间返回指定日期对象的 毫秒(0-999)
getTime() 返回从1970-1-1 08:00:00 UTC(协调世界时)到该日期经过的毫秒数,
对于 1970-1-1 08:00:00 UTC 之前的时间返回负值
注意:部分浏览器中 0-6 表示星期几 和 0-11 表示月份,可能有兼容性问题( IE浏览器为1-7 和 1-12)
2.获取时间戳
时间戳是指格林威治时间1970年01月01日00时00分00秒起至当下的毫秒数。
var time = new Date()
console.log('getTime',time.getTime())
console.log('valueOf',time.valueOf())
console.log('date.now()',Date.now())
console.log('+new Date()',+new Date())
三、设置时间日期
setFullYear() 设置 Date 对象中的年份(四位数字)。
setMonth() 设置 Date 对象中月份 (0 ~ 11)。
setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。
setHours() 设置 Date 对象中的小时 (0 ~ 23)。
setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。
setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。
setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。
setTime() 以毫秒设置 Date 对象。
上述方法均返回1970年1月1日 00:00:00至调整过的日期的毫秒数。
四、时间日期格式化
1.日期格式化方法
toString() 把 Date 对象转换为字符串。
toTimeString() 把 Date 对象的时间部分转换为字符串。
toDateString() 把 Date 对象的日期部分转换为字符串。
toUTCString() 根据世界时,把 Date 对象转换为字符串。
toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。
toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。
toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。
例:
var time = new Date()
console.log('toString()',time.toString())
// Tue Jun 02 2020 15:53:29 GMT+0800 (中国标准时间)
console.log('toTimeString()',time.toTimeString())
// 15:53:29 GMT+0800 (中国标准时间)
console.log('toDateString()',time.toDateString())
// Tue Jun 02 2020
console.log('toUTCString()',time.toUTCString())
// Tue, 02 Jun 2020 07:53:29 GMT
console.log('toLocaleString()',time.toLocaleString())
// 2020/6/2 下午3:53:29
console.log('toLocaleTimeString()',time.toLocaleTimeString())
// 下午3:53:29
console.log('toLocaleDateString()',time.toLocaleDateString())
// 2020/6/2
2.自定义格式化
function formatDate (date, fmt) {
var o = {
"M+": date.getMonth() + 1,
"d+": date.getDate(),
"h+": date.getHours(),
"m+": date.getMinutes(),
"s+": date.getSeconds(),
"q+": Math.floor((date.getMonth() + 3) / 3),
"S": date.getMilliseconds()
}
if (/(y+)/.test(fmt)) // 格式化的字符串中有1个或多个y
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length))
for (let 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
}
五、常用时间工具函数整理
export function formatDate (date, fmt) {
var o = {
"M+": date.getMonth() + 1,
"d+": date.getDate(),
"h+": date.getHours(),
"m+": date.getMinutes(),
"s+": date.getSeconds(),
"q+": Math.floor((date.getMonth() + 3) / 3),
"S": date.getMilliseconds()
}
/**
* 【第一步:如果格式化字符串中有y,就把y替换成date对象的年】
* date.getFullYear() + ""只是为了将数字Number类型的值转换为String类型的值
* .substr(4 - RegExp.$1.length))是根据fmt中y的数量进行替换:y有2个,就取年份的后两位;y有4个,就取年份的全4位
* 这一步完成之后,yyyy-MM-dd的值就会变成2020-MM-dd
*/
if (/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length))
/**
* 【第二步:将遍历对象o中的key,重复进行步骤1】
* fmt.replace的第二个参数有所区别
* (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))
* 这里是判断fmt中每个字母的数量,如果只写了一个(如yyyy-M-d),就直接将该字母替换为相应的值,位数为1的值不补零,如3月8号2020-3-8
* 如果字母的数量超过了1,就会对个位数补零,如如3月8号就会变成2020-03-08
*/
for (let 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
}
// 获取今天的日期
export function getToday () {
const dt = new Date()
return formatDate(dt, 'yyyy-MM-dd')
}
// 获取初始日期
export function getInitDate (yester) {
let dt = new Date()
if (yester) {
dt.setDate(dt.getDate() - 1)
}
return dt
}
// 获取昨天的日期
export function getYesterday () {
const dt = new Date()
dt.setDate(dt.getDate() - 1)
return formatDate(dt, 'yyyy-MM-dd')
}
// 获取30天前的日期
export function getMonthAgo (yester) {
const dt = getInitDate(yester)
dt.setDate(dt.getDate() - 29)
return formatDate(dt, 'yyyy-MM-dd')
}
// 获取本月
export function getMonth (date, yester) {
const dt = getInitDate(yester)
dt.setDate(date)
return formatDate(dt, 'yyyy-MM-dd')
}
// 获取本月最后一天
export function getMonthEnd (yester) {
const dt = getInitDate(yester)
const d = dt.getDate()
if (d > getMonthDay()) {
dt.setDate(getMonthDay())
}
return formatDate(dt, 'yyyy-MM-dd')
}
// 获取一个月的天数
export function getMonthDay (yester) {
const dt = getInitDate(yester)
dt.setMonth(dt.getMonth() + 1, 0)
return dt.getDate()
}
// 获取本周开始时间
export function getWeek (yester) {
const dt = getInitDate(yester)
if (dt.getDay() === 0) {
dt.setDate(dt.getDate() - 6)
} else {
dt.setDate(dt.getDate() - dt.getDay() + 1)
}
return formatDate(dt, 'yyyy-MM-dd')
}
// 获取本周结束时间
export function getWeekEnd (yester) {
const dt = getInitDate(yester)
const day = dt.getDay()
if (day !== 0) {
dt.setDate(dt.getDate() + 7 - day)
}
if (dt.getTime() > getInitDate(yester).getTime()) {
return formatDate(getInitDate(yester), 'yyyy-MM-dd')
} else {
return formatDate(dt, 'yyyy-MM-dd')
}
}
// 获取本年第一天
export function getYear (m, d, yester) {
const dt = getInitDate(yester)
dt.setMonth(m, d)
return formatDate(dt, 'yyyy-MM-dd')
}
// 获取本年最后一天
export function getYearEnd (yester) {
const dt = getInitDate(yester)
dt.setMonth(11, 31)
if (dt.getTime() > getInitDate(yester).getTime()) {
return formatDate(getInitDate(yester), 'yyyy-MM-dd')
} else {
return formatDate(dt, 'yyyy-MM-dd')
}
}
// 格式化json
export function formatJson (data) {
let json = JSON.stringify(data)
const reg = /([{}])/g
json = json.replace(reg, '\r\n$1\r\n')
const reg1 = /([[]\])/g
json = json.replace(reg1, '$1\r\n')
const reg2 = /(,)/g
json = json.replace(reg2, '$1\r\n')
const reg3 = /(\r\n\r\n)/g
json = json.replace(reg3, '\r\n')
const reg4 = /\r\n,/g
json = json.replace(reg4, ',')
return json
}
export function GMTToStr(time){ // 将 GMT格式的时间字符串 格式化为正常时间字符串
let date = new Date(time)
let Str=date.getFullYear() + '-' +
(handleTimeStr(date.getMonth() + 1)) + '-' +
handleTimeStr(date.getDate()) + ' ' +
handleTimeStr(date.getHours()) + ':' +
handleTimeStr(date.getMinutes()) + ':' +
handleTimeStr(date.getSeconds())
return Str
}
function handleTimeStr(tStr){ // 解决 10:2:2 出现各位数字格式化为 10:02:02
if (tStr < 10){
return '0'+ tStr
}else {
return tStr
}
}
// 获取今天的起始时间00:00:00
export function getTodayStartTime(fmt) {
let today = new Date()
today.setHours(0)
today.setMinutes(0)
today.setSeconds(0)
if(fmt) {
return formatDate(today, fmt)
} else {
return today
}
}
// 获取明天的起始时间00:00:00
export function getTomorrowStartTime(fmt) {
let dt = getTodayStartTime()
dt.setDate(dt.getDate() + 1)
if(fmt) {
return formatDate(dt, fmt)
} else {
return dt
}
}
// 获取【6天前当前时间的自然小时的第一秒时间点-当前时间的上一个自然小时的最后一秒时间点】
// 如当前时间为2020年11月18日16:05分,获取的值应该是【2020年11月12日16:00:00,2020年11月18日15:59:59】
export function get6DaysRange(fmt) {
let end = new Date()
end.setHours(end.getHours() - 1)
end.setMinutes(59)
end.setSeconds(59)
let milliSeconds = end.getTime() - 1000 * 60 * 60 * 24 * 6 // 毫秒数
let start = new Date(milliSeconds)
start.setSeconds(start.getSeconds() + 1)
if(fmt) {
return [formatDate(start, fmt), formatDate(end, fmt)]
} else {
return [start, end]
}
}
参考文献:https://www.runoob.com/js/js-obj-date.html