1.获取时间
- 使用new Date()来获取时间对象,默认是当前时间
- 时间对象可以调用一系列方法来获取其对应的到年月日,时分秒等(返回的数据类型是number类型)
- 注意:月份是以0开始的,即0代表一月份
<script>
//获取当前时间
var date = new Date()
console.log(date)//Wed Dec 11 2019 14:24:02 GMT+0800 (中国标准时间)
//获取年-月-日
console.log(date.getFullYear())//2019
console.log(date.getMonth()) //11 (0~11)
console.log(date.getDate())//11
//获取星期
console.log(date.getDay())//3 (0~6) 0就是礼拜天
//获取时-分-秒
console.log(date.getHours()) //14
console.log(date.getMinutes())//24
console.log(date.getSeconds())//2
//获取1970 年 1 月 1 日至今的毫秒数,一般用于对比2个时间点的差距
console.log(date.getTime())//1576046149784
//值的类型
console.log(typeof date.getHours())//number
console.log(typeof date.getTime())//number
//时间转换
console.log(date.toLocaleString())//2019/12/11 下午2:24:02
console.log(date.toString())//Wed Dec 11 2019 14:24:02 GMT+0800 (中国标准时间)
</script>
2.设置日期
- 在new Date()后可以通过一系列的方法来修改时间日期
- 可以修改年月日时分秒,修改与获取的API相似,只要将get替换成set即可
- 注意:月份是以0开始的,即0代表一月份
<script>
//创建时间
var date = new Date()
console.log(date.toLocaleString())//2019/12/11 下午2:58:52
//修改年-月-日
date.setFullYear(2020)
date.setMonth(1)//(0~11)
date.setDate(1)
console.log(date.toLocaleString())//2020/2/1 下午2:58:52
//修改时-分-秒
date.setHours(15)// (0 ~ 23)
date.setMinutes(16)
date.setSeconds(17)
console.log(date.toLocaleString())//2020/2/1 下午3:16:17
//修改星期 !!没有这方法!!!
//以毫秒设置 Date 对象。
date.setTime(1576046149784)
console.log(date.toLocaleString())//2019/12/11 下午2:35:49
</script>
<script>
//时间对象,当前时间
var date = new Date()
console.log(date.toLocaleString()) //2024/3/25 15:04:33
//往后延16天
var target_date = date.getDate() + 16
console.log(target_date) //41 25+16=41
//设定日期
date.setDate(target_date)
console.log(date.toLocaleString()) //2024/4/10 15:04:33
</script>
3.时间初始化
- 使用new Date()创建时间对象时,可以传入字符串来设定对应的时间,但是字符串的格式有兼容问题
//这两种格式主流支持
new Date('2024-03-24')
new Date('2024,03,24')
//IE只支持以下格式
new Date('2024/03/24')
//转换成IE支持的格式
var dateStr = "2013-3-15 20:20:03"
//格式转换
var reg = /-/g
var dateFormat = dateStr.replace(reg,"/")
4.封装格式化时间函数
- 通过原生的方式获取到时间对象对应的年月日时分秒,进行组合后返回
transformDateMethod(dateobj,format=''){
var year = dateobj.getFullYear()
var month = dateobj.getMonth()+1
var date = dateobj.getDate()
var hours = dateobj.getHours()
var minutes = dateobj.getMinutes()
var seconds = dateobj.getSeconds()
var day = dateobj.getDay()
var day_str = ''
switch(day){
case 0: day_str = '星期日';break;
case 1: day_str = '星期一';break;
case 2: day_str = '星期二';break;
case 3: day_str = '星期三';break;
case 4: day_str = '星期四';break;
case 5: day_str = '星期五';break;
case 6: day_str = '星期六';break;
default: break;
}
//两位数补全,这里可以使用 '5'.padStart(2,'0') 方法完成同样的效果
if(hours < 10){
hours = '0'+hours
}
if(minutes < 10){
minutes = '0'+minutes
}
if(seconds < 10){
seconds = '0'+seconds
}
//输入格式判断
if(format == ''){
//默认格式
return `${year}年${month}月${date}日 ${hours}:${minutes}:${seconds} ${day_str}`
}else{
//替换年月日时分秒
format = format.replace('YY',year)
format = format.replace('MM',month)
format = format.replace('DD',date)
format = format.replace('hh',hours)
format = format.replace('mm',minutes)
format = format.replace('ss',seconds)
format = format.replace('Day',day_str)
return format
}
}
5.时间插件moment.js
- moment.js封装了大量的时间方法,无论是兼容性还是效率都比原生js强
- 推荐使用Day.js,官方文档
- 引入插件:浏览器引入
<script src="https://cdn.bootcss.com/moment.js/2.24.0/moment.min.js"></script>
//安装
npm install moment --save
//引入moment
import moment from 'moment'
- 设置语言:默认情况下,插件使用的是英文,如果想要中文输出(输出星期几),需要引入语文文件(如果是npm环境,则还需要进行声明)
<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<!-- 在moment.js之后引入 -->
<script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.1/locale/zh-cn.min.js"></script>
<script>
//如果是npm环境,则还需要进行声明
//moment.locale('zh-cn')
//输出星期几
var week_day = moment().format('dddd')
console.log(week_day) //Monday or 星期一
</script>
- 格式化时间日期:这个插件最常用的功能就是这个,调用format()方法,通过正则替换的形式输出带有年月日信息的字符串(碰到字符串中的转义字符则替换成对应的数据,普通字符串则原模原样输出)
<script>
//年份
console.log(moment().format('YYYY')) //2021 4位数年份
console.log(moment().format('YY'))//21 2位数年份
console.log(moment().format('Y'))//2021
console.log('**************')
//月份
console.log(moment().format('MMMM')) //一月 大写
console.log(moment().format('MMM')) //1月 小写
console.log(moment().format('MM')) //01 2位数月份
console.log(moment().format('M')) //1 1位数月份
console.log('**************')
//日期
console.log(moment().format('Do')) // 4日 月的某天
console.log(moment().format('D')) // 4 月的某天 1位数
console.log(moment().format('DD')) // 04 月的某天 2位数
console.log(moment().format('DDD')) // 4 年的某天 1位数
console.log(moment().format('DDDD')) // 004 年的某天 3位数
console.log('**************')
//时钟
console.log(moment().format('hh')) //02 12小时制 2位数
console.log(moment().format('h')) //2 12小时制 1位数
console.log(moment().format('HH')) //14 24小时制 2位数
console.log(moment().format('H')) //14 24小时制 1位数
console.log('**************')
//分钟
console.log(moment().format('mm')) //07 分钟数 最少2位数
console.log(moment().format('m')) //7 分钟数 1位数
console.log('**************')
//秒钟
console.log(moment().format('ss')) //04 秒钟 最少2位数
console.log(moment().format('s')) //4 秒钟 1位数
//时间戳
console.log(moment().format('x')) //1609740460631 时间戳 单位毫秒
console.log('**************')
//星期
console.log(moment().format('dddd')) //星期一
console.log(moment().format('ddd')) //周一
console.log(moment().format('e')) //0 [0-6]输出星期的序号 周一为0 周日为6
console.log(moment().format('E')) //1 [1-7]输出星期的序号 周一为1 周日为7
console.log('**************')
//上午或下午
console.log(moment().format('a')) //下午
console.log(moment().format('A')) //下午
//一年中的第几天
Moment('2023-01-01').format('DDDD') //001
Moment('2023-01-01').format('DDD') //1
//季度
Moment('2023-02-19').format('Q') //1
</script>
- 输出相对时间fromNow():输出目标时间与当前时间的相对时间,moment.js会根据时间长度自动换算时间单位
<script>
//传入一个12年前的时间
console.log(moment(new Date().setFullYear(2008)).fromNow()) //12 年前
//传入一个3个月前的时间 8表示9月份
console.log(moment(new Date().setMonth(8)).fromNow()) //3 个月前
//传入一个10前的时间
var before_10day = new Date()
before_10day.setDate(before_10day.getDate() - 10)
console.log(moment(before_10day).fromNow()) //10 天前
//传入一个10小时前的时间
var before_10hours = new Date()
before_10hours.setHours(before_10hours.getHours() - 10)
console.log(moment(before_10hours).fromNow()) //10 小时前
</script>
- 时长单位转换:将两个时间的间隔(单位默认毫秒),转换成其他单位进行输出(秒,分钟,小时,天),这里用分钟做演示,其他时间单位的方法自查文档
<script>
//获取时间间隔(相差2分钟30秒)
var duration = new Date('2021-07-23 12:32:30').getTime() - new Date('2021-07-23 12:30:00').getTime()
//创建moment时长对象
var $duration = moment.duration(duration) //默认毫秒
//直接转换成分钟计算,通常转换成小数
var minutes_num = $duration.asMinutes() //2.5
//只取分钟部分,其他忽略
var minutes_now = $duration.minutes() //2
</script>
//日期格式化
moment().format('MMMM Do YYYY, h:mm:ss a'); // 十月 7日 2020, 12:02:37 中午
moment().format('dddd'); // 星期三
moment().format("MMM Do YY"); // 10月 7日 20
moment().format('YYYY [escaped] YYYY'); // 2020 escaped 2020
moment().format(); // 2020-10-07T12:02:37+08:00
//相对时间
moment("20111031", "YYYYMMDD").fromNow(); // 9 年前
moment("20120620", "YYYYMMDD").fromNow(); // 8 年前
moment().startOf('day').fromNow(); // 12 小时前
moment().endOf('day').fromNow(); // 12 小时内
moment().startOf('hour').fromNow(); // 3 分钟前
//日历时间
moment().subtract(10, 'days').calendar(); // 2020/09/27
moment().subtract(6, 'days').calendar(); // 上星期四12:02
moment().subtract(3, 'days').calendar(); // 上星期日12:02
moment().subtract(1, 'days').calendar(); // 昨天12:02
moment().calendar(); // 今天12:02
moment().add(1, 'days').calendar(); // 明天12:02
moment().add(3, 'days').calendar(); // 下星期六12:02
moment().add(10, 'days').calendar(); // 2020/10/17
//多语言支持
moment.locale(); // zh-cn
moment().format('LT'); // 12:02
moment().format('LTS'); // 12:02:37
moment().format('L'); // 2020/10/07
moment().format('l'); // 2020/10/7
moment().format('LL'); // 2020年10月7日
moment().format('ll'); // 2020年10月7日
moment().format('LLL'); // 2020年10月7日中午12点02分
moment().format('lll'); // 2020年10月7日 12:02
moment().format('LLLL'); // 2020年10月7日星期三中午12点02分
moment().format('llll'); // 2020年10月7日星期三 12:02