一、Date对象的定义
在JavaScript中,Date对象用来表示日期和时间。
1-1、获取系统当前时间
要获取系统当前时间,用:
var now = new Date();
now; // Thu Mar 28 2024 15:48:50 GMT+0800 (中国标准时间)
now.getFullYear(); // 2024, 年份
now.getMonth(); // 2, 月份,注意月份范围是0~11,2表示三月
now.getDate(); // 28, 表示28号
now.getDay(); // 4, 表示星期四
now.getHours(); // 15, 24小时制
now.getMinutes(); // 48, 分钟
now.getSeconds(); // 50, 秒
now.getMilliseconds(); // 875, 毫秒数
now.getTime(); // 1435146562875, 以number形式表示的时间戳
注意,当前时间是浏览器从本机操作系统获取的时间,所以不一定准确,因为用户可以把当前时间设定为任何值。
JavaScript的Date对象月份值从0开始,牢记0=1月,1=2月,2=3月,……,11=12月。
1-2、创建一个指定的日期
1、方法一:使用年、月、日、小时、分钟、秒和毫秒
var d = new Date(2015, 5, 19, 20, 15, 30, 123);
d; // Fri Jun 19 2015 20:15:30 GMT+0800 (CST)
参数为:年、月、日、小时、分钟、秒和毫秒
2、方法二:使用日期字符串
创建一个指定日期和时间的方法是解析一个符合ISO 8601格式的字符串:
var d = Date.parse('2015-06-24T19:49:22.875+08:00');
d; // 1435146562875
使用Date.parse()时传入的字符串使用实际月份01~12,转换为Date对象后getMonth()获取的月份值为0~11。
返回的不是
Date
对象,而是一个时间戳。
或者:
let dateString = "2023-01-15T10:30:00"; // ISO 8601 格式
let specifiedDate = new Date(dateString);
console.log(specifiedDate);
3、方法三:使用时间戳(毫秒)
var d = new Date(1435146562875);
d; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
d.getMonth(); // 5
1-3、时区
Date对象表示的时间总是按浏览器所在时区显示的,不过我们既可以显示本地时间,也可以显示调整后的UTC时间。
var d = new Date(1435146562875);
d.toLocaleString(); // '2015/6/24 下午7:49:22',本地时间(北京时区+8:00),显示的字符串与操作系统设定的格式有关
d.toUTCString(); // 'Wed, 24 Jun 2015 11:49:22 GMT',UTC时间,与本地时间相差8小时
那么在JavaScript中如何进行时区转换呢?
实际上,只要我们传递的是一个number
类型的时间戳,我们就不用关心时区转换。任何浏览器都可以把一个时间戳正确转换为本地时间。
时间戳是个什么东西?
时间戳是一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在的毫秒数。
假设浏览器所在电脑的时间是准确的,那么世界上无论哪个时区的电脑,它们此刻产生的时间戳数字都是一样的,所以,时间戳可以精确地表示一个时刻,并且与时区无关。
所以,我们只需要传递时间戳,或者把时间戳从数据库里读出来,再让JavaScript自动转换为当地时间就可以了。
要获取当前时间戳,可以用:
console.log(Date.now()); // 老版本IE没有now()方法
console.log(new Date().getTime());
1-4、格式化输出
JavaScript的Date对象本身并不提供直接的格式化方法,但你可以使用其提供的方法来获取各个部分,并手动拼接成所需的格式。
或者,你可以使用第三方库(如moment.js或date-fns)来简化日期和时间的格式化。
手动格式化日期和时间:
function formatDate(date) {
let year = date.getFullYear();
let month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,所以要加1,并使用padStart填充前导零
let day = String(date.getDate()).padStart(2, '0');
let hours = String(date.getHours()).padStart(2, '0');
let minutes = String(date.getMinutes()).padStart(2, '0');
let seconds = String(date.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
let specifiedDate = new Date(2023, 0, 15, 10, 30, 0);
console.log(formatDate(specifiedDate)); // 输出类似 "2023-01-15 10:30:00"
padStart方法用于确保月份、日期、小时、分钟和秒数始终是两位数,通过在前面填充零来实现。
1-4-1、padStart方法
padStart(),是 JavaScript 中的一个字符串方法,它用于在当前字符串的起始位置填充指定的字符串,直到达到指定的长度。如果原始字符串已经达到或超过指定的长度,则返回原始字符串。
str.padStart(targetLength [, padString])
targetLength
(必需):目标字符串的长度。如果此数值小于当前字符串的长度,则返回当前字符串。padString
(可选):用于填充的字符串。如果省略此参数,则默认用空格填充。如果padString
的长度超过所需填充的字符数,则只截取padString
的部分字符进行填充。
示例:
let str = "5";
let paddedStr = str.padStart(3, '0'); // "005"
padStart() 方法不会改变原始字符串,而是返回一个新的字符串。