JS Date对象

一、创建日期对象

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-11getDate()     xx号,根据本地时间返回指定日期对象的 月份中的第几天(1-31getDay()      星期x,根据本地时间返回指定日期对象的 星期中的第几天(0-6getHours()    根据本地时间返回指定日期对象的 小时(0-23getMinutes()   根据本地时间返回指定日期对象的 分钟(0-59getSeconds()   根据本地时间返回指定日期对象的 秒数(0-59getMilliseconds()    根据本地时间返回指定日期对象的 毫秒(0-999getTime()      返回从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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值