date()的返回值的数据类型时对象(object)
1.获取时间点
将时间点的所有信息封装到对象中,可以通过某一方法获取时间点(年、月、日、时、分、秒、毫秒等)的信息
获取常用的时间点:
<script str="">
//时间点的所有信息都被封装到对象中,可以通过一方法获取时间点的信息,如下
const date = new Date();
console.log(date)//获取全部:星期几、几月、几号、年份、时间(包括几点几分几秒)
console.log(date.getFullYear()); // 获取四位数的年份(2023)
console.log(date.getMonth()); // 获取月份,从0开始(7代表8月)
console.log(date.getDate()); // 获取日期(16)
console.log(date.getDay()); // 获取星期几,从0开始(星期天)(3代表星期三):1234560
console.log(date.getHours()); // 获取小时(当前时间的小时)范围0-23
console.log(date.getMinutes()); // 获取分钟(当前时间的分钟)范围0-59
console.log(date.getSeconds()); // 获取秒数(当前时间的秒数) 范围0-59
console.log(date.getMilliseconds) //获取毫秒
console.log(date.getTime) //获取毫秒:getTime()方法是Date对象的一个方法,它返回一个日期对象的时间戳(timestamp),表示从1970年1月1日午夜(格林尼治标准时间)到指定日期的毫秒数。
</script>
2.时间转化字符串
(1)传入一个参数:填写时间格式字符串(可以只记年月时分秒)
可以填数字:从时间戳开始往前前进了多少毫秒
(2)传入多个参数
从左往右一次是日、年、时、分、秒
若没添加,则默认为0
里面的数字可以任意填,因为相同会自动转换:如填了32,则会满12进一:返回结果为4,年份的话会增加相应的年数:2005+(32/12取整) 月份:32%12
3.时间运算:可以计算两个时间差值
a是获取当前时间 a1是自己定义一个时间
(1)静态方法:可以快速得到当前时间的对象,图中代码130和131意思一样的
(2)修改一个时间点对象的信息
setMonth(),setMinutes():两者分别表示可以将月修改为自己想要的月份和分
习题1:判断发表文章的时间:若发表时间不超过1分钟,则返回“刚刚“
时间在1分钟到1小时之间显示“n分钟前”
大于1小时则返回“n年-n月-n:n”
<script>
var str = "Wed Aug 19 11:40:10 +0800 2023"//自己定义的时间
function sinaTime(str) {
var dt1 = new Date()//获取当前时间
var dt2 = new Date(str)//传入刚刚定义的时间
var asbdt = dt1 - dt2//当前时间减去自己定义的时间的绝对值
console.log(asbdt)
if (0 > asbdt) {
return "见鬼了"
}
else if (0 <= asbdt && asbdt < 60 * 1000) {//若时间差在(1,60s),则返回“刚刚”
return "刚刚"
}
else if (60 * 1000 <= asbdt && asbdt < 60 * 60 * 1000) {//若时间差在(1,60分),则返回“n分钟前”
var m = new Date(asbdt).getMinutes()//1970-01-01 08:02:30
return `${m}分钟前`
}
else if (asbdt >= 60 * 60 * 1000) {
var mo = (dt2.getMonth() + 1 + "").padStart(2, "0")//若月份小于10,则在其前面用0补充,下面一样的
var d = (dt2.getDate() + "").padStart(2, "0")
var h = dt2.getHours().toString().padStart(2, "0")
var mu = dt2.getMinutes().toString().padStart(2, "0")
var s = dt2.getSeconds().toString().padStart(2, "0")
return `${mo}-${d} ${h}:${mu}:${s}`//按照自己想要的格式编写返回值
}
}
var re = sinaTime(str)//"刚刚" "23分钟前" "08-16 15:23"
console.log(re)
</script>
习题02进阶:交易时段定义为周一到周五的早上 9 点~10 点 15,10 点 30~11 点 30,下午 1 点 30 到 3 点,晚上 21 点到次日凌晨 2 点半,请写一个函数判断现在是否在交易 时段内,如果不在则等多久才能等到交易时段。
示例:现在是 2021 年 5 月 20 日 17:10,该函数判断结果应当为不在交易时段内, 等 3 小时 50 分钟后到交易时段(提示:周六凌晨是交易时间,周一凌晨不是交易 时间)
<script>
function show(str, now, nextStart) {
// 下一个交易时间
let nextInvail = new Date(nextStart).valueOf();
let nowTime = new Date(now).valueOf();
// 打印当前时间
console.log('当前时间:', now, `(星期${new Date(now).getDay()})`);
//相差的分钟数
if (str === 1) {
华清远见教育集团 – 高端 IT 就业培训专家
console.log('在交易时间段');
} else {
console.log('不在交易时间段内');
let cha = Math.trunc((nextInvail - nowTime) / 1000 / 60);
console.log(`等${Math.trunc(cha / 60)}小时${Math.trunc(cha % 60)}分钟后到交
易时间段`);
}
}
function showTime(tt) {
let now = new Date();
if (tt) now = new Date(tt);
let YMD = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`;
let HM = `${now.getHours()}:${now.getMinutes()}`;
let vailArray = [
/** 2, 5 周 2~周 5 的交易时间段 */
[2, 5, [
'00:00', '02:30', /** 凌晨也是交易时间 */
'09:00', '10:15', /** 交易时间段的 开始时间 和 结束时间 */
'10:30', '11:30',
'13:30', '15:00',
'21:00', '24:00'
]
],
[0, 0, []], /** 0, 0, 周 7 的交易时间段,距离下周一是 1 天,对应下标 1 */
[6, 6, ['00:00', '02:30']], /** 6, 6, 周 6,距离下周一 2 天,对应下标 2 */
[1, 1, [
/** 周一凌晨不是交易时间 */
'09:00', '10:15',
'10:30', '11:30',
'13:30', '15:00',
'21:00', '24:00'
]
]
];
let w = now.getDay();/* 星期几 */
/**找出测试时间星期几对应的下标:元素 0 和 1 是星期的起止值 */
const wInd = vailArray.findIndex(item => w >= item[0] && w <= item[1]);
//找时间段:在对应的星期设置的时间段(下标 2 的元素)里面找匹配的时间段
华清远见教育集团 – 高端 IT 就业培训专家
const hInd = vailArray[wInd][2].findIndex(hm => {
/**1,交易小时 > 检测时间的小时
* 2,或者
* 交易小时 === 测试时间的小时
* 并且
* 交易分钟数 >=测试的时间分钟数
*/
return hm.split(':')[0] / 1 > HM.split(':')[0] / 1 || (
hm.split(':')[0] / 1 == HM.split(':')[0] / 1
&&
hm.split(':')[1] / 1 >= HM.split(':')[1] / 1
);
});
if (hInd === -1) {
/**
* 1,-1 表示没有找到,肯定是周 6 或周天
* 2,因为周 1~周 5 有 24:00 兜底
*/
/**
* 1,wInd 就是对应的星期的下标,具体参考 vailArray 注释
* 2,下次交易时间必然是下周一的 09:00,所以,
* 从 00:00:00 开始,往后推迟 (wInd * 24 + 9) 小时
*/
let endVaild = new Date(YMD + ' 00:00:00').valueOf() + (wInd * 24 + 9) * 3600000;
show(0, YMD + ' ' + HM, new Date(endVaild));
} else if (hInd % 2 === 0) {
/**
* 1,下标是偶数,则表示是在交易时间段的 开始时间 之前
* 2,那么下一次交易时间也对应的就是这个 开始时间
*/
show(0, YMD + ' ' + HM, YMD + ' ' + vailArray[wInd][2][hInd])
} else if (hInd % 2 === 1) {
/**
* 1,下标是奇数,则表示是在交易时间段的 结束时间 之前 ;
* 2,那既然没有在开始时间之前(hInd % 2 === 0),
* 而又在 结束时间 之前,因此 就是在交易时间段之内
*/
show(1, YMD + ' ' + HM)
华清远见教育集团 – 高端 IT 就业培训专家
}
// setTimeout(showTime, 60000);
}
showTime('2022-07-01 01:59:40');
showTime('2022-07-02 01:30:40');
showTime('2022-07-04 01:30:40');
</script>