Typescript:Date 日期时间对象

创建对象

方式一

let date:Date = new Date()

方式二

let date:Date = new Date("2023-10-24 05:20:00")

方式三

注意:月份是 0-11,所以实际月份要-1

let date:Date = new Date(2023,9,24,5,20,0)

案例

通过调用 get() 方法,可以获取年月日

<script>

    let date:Date = new Date();
    console.log("年:"+date.getFullYear());    //获取完整的年份(4位,1970-????)
    console.log("月:"+date.getMonth());       //获取当前月份(0-11,0代表1月)
    console.log("日:"+date.getDate());        //获取当前日(1-31)
    console.log("星期:"+date.getDay());         //获取当前星期X(0-6,0代表星期天)

    console.log("时:"+date.getHours());       //获取当前小时数(0-23)
    console.log("分:"+date.getMinutes());     //获取当前分钟数(0-59)
    console.log("秒:"+date.getSeconds());     //获取当前秒数(0-59)
</script>

执行结果如下:

年:2022
月:0
日:18
星期:2
时:22
分:45
秒:40

封装函数

js中的Date不想java的Date,可以格式化输出,需要自行实现

/* 返回当前时间,格式:yyyy-MM-dd HH:mm:ss */
function now(){
    let date: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())

获取其他值

<script>

    let date:Date = new Date();

    //获取当前时间距离1970.1.1 00:00:00 的毫秒数
    console.log("距离1970.1.1的毫秒数:"+date.getTime());        
    console.log("毫秒:"+date.getMilliseconds());    //获取当前毫秒数(0-999)
    console.log("日期:"+date.toLocaleDateString());     //获取当前日期
    console.log("时间:"+date.toLocaleTimeString( ));        //获取日期与时间
    console.log("日期时间:"+date.toLocaleString( ));        //获取日期与时间
</script>

执行结果如下:

当前时间(从1970.1.1开始的毫秒数):1642517140592
毫秒:592
日期:2022/1/18
日期时间:2022/1/18 下午10:45:40

时间的本质

getTime()

let date:Date = new Date();
console.log("距离1970-1-1 00:00:00 的毫秒数:",date.getTime())
console.log("距离1970-1-1 00:00:00 的年数:",date.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')

原文出处:/show_1GW2FRYCXWYH.html