日期时间对象的声明
使用new关键词调用Date构造
//不传参
var date=new Date()//获取当前的本地时间
console.log(date)//以相关格式显示的本地时间
//传入一个字符串作为参数
var date=new Date ('2010/5/20 10:10:10 ')//以对应的日期时间显示格式来传入字符 进行解析
//能解析的情况会将当前的传入的日期格式的内容做为时间传入
console.log(new Date('2010年10月10日 10时10分10秒')) //Invalid Date
//传入一个数字作为传输 传入其实是毫秒值 距离1970年1月10日 00:00:00的毫秒值
console.log(new Date(1000*60*60*24)) //1970 1月2日 8点
//超过会自动向上递增
console.log(new Date(2000,13,40,1,1,70))//2001三月 12日 1点02分10秒
主要方法
获取日期时间(get开头)
- getFullyear 获取年 (完整年)
- getMonth 获取月份(0-11 0表示1月)
- getDate 获取一个月的第几天(1-31)
- getDay 获取一个星期第几天(0-6 星期天为0)
- getHours 获取小时
- getMinutes 获取分钟
- getSeconds 获取秒钟
- getMilliseconds 获取毫秒值
- getTime 获取离格林兰治时间的毫秒值
- getTimezoneOffset 获取时区偏移
- 相关utc方法 (UTC 国际标准时间)
- getUTCFullYear (国际标准年)
- .....
设置日期时间 (set开头 超过会自动向上递增)
- seFullYear 设置年
- setMonth 设置月份
- setDate 设置一个月的第几天 (1-31)
- setDay设置一个星期第几天(0-6 星期天为0)
- setHours 设置小时
- setMinutes 设置分钟
- setSeconds 设置秒钟
- setMilliseconds 设置毫秒值
- setTime 设置离格林兰治时间的毫秒值
- 相关utc方法 (UTC 国际标准时间)
- setUTCFullYear (国际标准年)
- .....
相关转字符串方法
- toString 转字符串
- toDateString 将日期转为字符串
- toTimeString 将时间转为字符串
- toLocaleString 根据本地格式转为字符串
- toLocaleTimeString 根据本地格式将时间转为字符串
- toLcaleDateString 根据本地格式将日期转为字符串
- toUTCString/toGMTString 将当前时间按照UTC的格式转为字符串
- toISOString 将当前时间按照ISO(构建标准)的格式转为字符串
静态方法及属性
属性(继承于Fucntion)
- length 函数的形参个数
- name 函数的名字
方法
UTC传入对应的日期时间返回离格林拉治时间的毫秒值(按照00:00:00) now获取当前时间离格林兰治时间的毫秒值 parse 传入一个日期时间字符串 返回离格林兰治时间的毫秒值
日期时间对象的特性
他可以进行计算 ((-/%*)自动转换为number的毫秒值)
var now = new Date(100000000001)
var old = new Date(100000000000)
console.log(now - old)//1
console.log(now + old) //字符串连接
练习
封装一个函数计算传入的日期 计算离当前日期的时间(以年 天 时 分 秒显示)
function reduceTime(date){
//计算传入日期和当前日期的差
var resultMs=Math.abs(Date.now()-date)
//以年日分秒显示
var year =parseInt(resultMs/1000/60/60/24/365)
var day =parseInt(resultMs/1000/60/60/24%365)
var hours=parseInt(resultMs/1000/60/60/%24)
var mitues=parseInt(resultMs/1000%60)
console.log(`${year}年${day}天${hours}时${mintues}分
${seconds}秒`)}
//调用
reduceTime(new Date('2012/10/10 12:12:12'))
}
求2000年最后一个星期天是哪天
function getLastSunday(year){
//构建日期对象 下一年的第一天
var time = new Date(year+1,0)
//一直向下减一天得到星期天退出
while(true){
time.setDate(time.getDate()-1)
//判断是否为星期天
if(time.getDay()==0){
return time
}
}
}
console.log(getLastSunday(2000).toLocaleString())
计算当前时间距离2008/8/8 年过去了多少天
function getDiffDay(date){
//得到差距的毫秒值
var ms = Math.abs(Date.now() - date)
//转为天
var day = parseInt(ms/1000/60/60/24)
console.log(day)
}
getDiffDay(new Date('2008/8/8'))
计算当前离过年还要多少天 输入你的出生日期 假设你能活100岁 打印你的离开世界的日期
function setHundredForYear(birthday){
birthday.setFullYear(birthday.getFullYear()+100)
console.log(birthday.toLocaleString())
}
setHundredForYear(new Date('2001/1/1'))
计算当前离1月1日过去了多少个星期
function getWeekToDate(){
var now = new Date()
var firstDay = new Date(now.getFullYear(),0)
//计算差值的毫秒值
var ms = now - firstDay
//获取当前的时间为星期几 排除这个星期
ms -= now.getDay()*1000*60*60*24
//计算对应的星期个数
var week = Math.ceil(ms/1000/60/60/24/7)
//表示当前年份1月1日如果为星期天这个星期就不排除 如果不是就排除
if(firstDay.getDay!=0){
week--
}
console.log(week)
}
getWeekToDate()
第三方js库
第三方js库(相当于别人封装好的js内容,你只要调用就ok了)
moment.js 专门用于操作对应的日期时间的js库
概况
在jacaScript 中解析,效验,操作,显示日期和时间的js库
重点方法
moment 产生一个moment对象
moment相关方法
- format 格式化 (Y年 M月h表示小时 m表示分钟s表示秒钟 d表示星期几)
- fromNow 返回相对当前的时间
- add 添加
- subtract 减少
- startOf 什么时候开始的
- endOf 什么时候结束的
- calendar 日历方法
//格式化日期
// YY 表示年 M 表示月 D表示日期 d表示星期 h表示小时 m表示分钟 s表示秒
console.log(moment().format('YY年MM月DD日 hh时mm分ss秒'))
console.log(moment().format('MMMM Do YYYY, h:mm:ss a')); // 六月 25日 2023,
5:11:19 下午
console.log(moment().format('dddd')); // 星期日
console.log(moment().format("MMM Do YY")); // 6月 25日 23
console.log(moment().format('YYYY [escaped] YYYY')); // 2023 escaped 2023
console.log(moment().format());
//相当当前时间 moment可以传入对应的字符来识别 (传入格式)一个日期时间 不传参获取当前的时间
console.log(moment("2011-10-31", "YYYY-MM-DD").fromNow())
console.log(moment("2011-10-31", "YYYY-MM-DD").format())
//format 进行格式化 返回一个字符串
//fromNow 相当当前的时间的距离 返回字符串
//calendar 日历查看
console.log( moment().calendar())
全局方法 (global全局)
定时器(setinterval)定时执行 (无限循环执行 需要手动清除)
基础使用
setInterval (执行代码块(可以是字符串可以是函数),间隔时间(毫秒值),传递的参数(传递给执行的函数的参数))
示例
打印数值
var i = 1
setInterval(function(arg){
console.log(i,arg) //arg会接收到第三个参数传递的10
i++
},1000,10)
从1数到100
//从1数到100
var id = setInterval(function(){
console.log(i)
i++
//到100的时候停止 清除定时器
if(i>100){
clearInterval(id)
}
},10)
定时器必须关闭 不然会一直占用内存(导致内存泄漏(:一个内存空间一直占用 没有得到释放 而这个空间又没有被使用))
清除定时器 clearInterval
//清除定时器 里面传入定时器的标识id 这个id是一个数值
clearInterval(timer) //同步(队列) 同步比异步先执行 异步(多个队列) js引擎只有一个
延时器(setTimeout)延时执行(只执行一次) 延时器和定时器使用一致 只会执行一次
var timer = setTimeout(function (arg) {
console.log(arg)
//延时器一般也要清除
clearTimeout(timer)
}, 1000, '你好')
clearTimeout清除延时器
clearTimeout(延时器id)
js引擎 执行顺序
- 定时器和延时器都是异步的,js引擎优先处理同步内容
- js引擎和gui渲染线程是互斥的(不能同步执行)