JavaScript 获取日期时间(Date) 作者:马育民 • 2022-01-18 22:47 • 阅读:10144 # 说明 JavaScript 中获取日期,需要先创建 `Date` 对象,非常类似 java代码 详细说明参见: https://www.w3school.com.cn/jsref/jsref_obj_date.asp https://www.runoob.com/js/js-obj-date.html # 创建对象 ### 方式一 ``` var d = new Date() ``` ### 方式二 ``` var d = new Date("2023-10-24 05:20:00") ``` ### 方式三 **注意:**月份是 `0-11`,所以实际月份要-1 ``` var d = new Date(2023,9,24,5,20,0) ``` # 案例 通过调用 `get()` 方法,可以获取年月日 ``` ``` 执行结果如下: ``` 年:2022 日期.html:14 月:0 日期.html:15 日:18 日期.html:16 星期:2 日期.html:17 当前时间(从1970.1.1开始的毫秒数):1642517140592 日期.html:18 时:22 日期.html:19 分:45 日期.html:20 秒:40 日期.html:21 毫秒:592 日期.html:22 日期:2022/1/18 日期.html:24 日期时间:2022/1/18 下午10:45:40 ``` # 封装函数 js中的Date不想java的Date,可以格式化输出,需要自行实现 ``` /* 返回当前时间,格式:yyyy-MM-dd HH:mm:ss */ function now(){ var date = new Date() var year = date.getFullYear() var month = date.getMonth() + 1 // 月份从0开始 var day = date.getDate() var h = date.getHours() var m = date.getMinutes() var s = date.getSeconds() var time = year +"-"+fillZero(month)+"-"+fillZero(day)+" "+fillZero(h)+":"+fillZero(m)+":"+fillZero(s) return time } // 返回星期一、星期二、星期日 function week(){ var weeks = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'] var week = date.getDay() // 获取星期,0是星期日 // if(week == 0){ // return "星期日" // }else if(week == 1){ // return "星期一" // } return weeks[week] } ``` 测试: ``` console.log("当前时间:",now()) console.log("星期:",week()) ``` # 时间的本质 [![](/upload/0/0/1IX5ORv3d4HV.png)](/upload/0/0/1IX5ORv3d4HV.png) ### getTime() ``` var d = new Date() console.log("距离1970-1-1 00:00:00 的毫秒数:",d.getTime()) console.log("距离1970-1-1 00:00:00 的年数:",d.getTime() / 1000 / 60/60/24/365) ``` # 案例-朋友圈发布时间 ``` /* * 朋友圈发布时间, d = 当前时间 – 发布时间 (需要用到毫秒数) 当 d 小于3分钟显示刚刚 当 d 小于60分钟显示 xx分钟前 当 d 小于24小时显示 xx小时前 。。。。。 其它:显示 yyyy-MM-dd HH:mm */ var currentTime = Date.now() // new Date().getTime() // 假设发布时间是:2023-10-26 08:18 /* * 需要将发布时间转成 相应的毫秒数 * * 1. 创建Date对象,需要设置年月日时分秒 * 2. 获取毫秒数 */ // var releaseDate = new Date("2023-10-24 05:20:00") console.log("Date.now():",Date.now()) // 注意:实际月份要-1,因为此种方式创建对象时,月份会自动+1 // var releaseDate = new Date(2023,9,24,5,20,0) var releaseDate = new Date() releaseDate.setFullYear(2023) releaseDate.setMonth(9) releaseDate.setDate(24) releaseDate.setHours(5) releaseDate.setMinutes(20) releaseDate.setSeconds(0) console.log("releaseDate:",releaseDate) var releaseTime = Date.parse("2023-10-24 05:20:00") //releaseDate.getTime() // console.log("发布时间对象:",releaseTime) // 换算成分钟 var diff = (currentTime - releaseTime)/1000/60 console.log("diff:",diff) if(diff < 3){ // 小于 3分钟 console.log("刚刚") }else if(diff < 60){ // 小于60分钟 console.log( Math.ceil (diff) +"分钟前") }else if( diff/60 < 24){ // 小于24小时 console.log( Math.ceil( diff/60 ) + "小时前" ) }else{ var dis = releaseDate.getFullYear()+ "-"+ (releaseDate.getMonth() + 1 )+ "-"+releaseDate.getDate()+ " "+releaseDate.getHours()+ ":"+releaseDate.getMinutes() console.log(dis) } ``` # set 方法 ### setDate() **注意:**超过了该月份应有的天数,则增加月份。 例子:如果当前是2月,如果 `setDate(30)`,月份就会加1 ### setMonth() 设置月份 **注意:**设置月份后,如果超过了该月份应有的天数,则增加月份。 例子:如果当前是8月31日,如果 `setDate(8)` ,即:设置为9月,那么就是9月31日,由于9月最后一天是30日,所以月份就会加1,即:10月1日 **解决:** 先设置天数、再设置月份 ``` var endDate = new Date() // 结束的时间对象 endDate.setDate(1) // 当前是8月31日,先设置为8月1日 endDate.setMonth(8) // 然后再设置为 9月1日 ``` # 静态方法 返回系统当前时间距离 `1970-1-1 00:00:00` 的毫秒数 ``` Date.now() ``` 传入时间(格式:`yyyy/mm/dd hh:mm:ss`),返回该时间距离 `1970-1-1 00:00:00` 的毫秒数 ``` Date.parse('2012/12/01 16:07:32') ``` 原文出处:http://malaoshi.top/show_1IX2cJiYZyMX.html