JavaScript从零开始第九天笔记
一.时间(Date)内置对象
Date是一个内置对象,用于创建和操作日期和时间。
创建方法如下,注意一下内部的传的参数。
var currentDate = new Date(); // 创建一个包含当前日期和时间的Date对象
var specificDate = new Date(2022, 5, 20); // 创建一个特定日期的Date对象,月份从0开始计数,即0表示一月
var specificDateTime = new Date(2022, 5, 20, 10, 30, 0); // 创建一个特定日期和时间的Date对象
一个参数: 填数字(毫秒)
var dt = new Date(5000000)
一个参数: 填时间格式字符串
var dt2 = new Date("2023-07-15")
console.log(dt2)// 2023-07-15 08:00:00-000
1.getFullYear()
用于获取日期中的完整四位数的年份。
var Date1 = new Date();
var year = Date1.getFullYear();
console.log(year); // 输出当前年份,如2023
2.getYear()
用于获取日期中的两位数的年份
然而,由于getYear()方法存在一些问题和不确定性,不推荐使用。在1999年以前,getYear()返回的是相对于1900年的年份。而在1999年及以后,getYear()返回的是相对于1900年的年份减去100。这种不一致性导致了getYear()方法的混淆和错误使用。
3.getMonth()
getMonth()方法是用来获取日期对象的月份值的。
它返回的是一个基于0的整数值,即从0开始的一月到11结束的十二月。
var date = new Date();
var month = date.getMonth();
console.log(month); // 0-11之间的一个整数,表示当前月份
4.getDate()
getDate()方法是用来获取日期对象的日期值的。
它返回的是一个基于1的整数值,即从1开始的每个月的日期。
var date = new Date();
var day = date.getDate();
console.log(day); // 当前日期的值 今天是16,所以输出16
5.getHours()
getHours()方法是用来获取日期对象的小时值的。它返回的是一个基于24小时制的整数值,即从0到23的范围。
var date = new Date();
var hours = date.getHours();
console.log(hours); // 当前小时的值 输出16
6.getMinutes()
getMinutes()方法是用来获取日期对象的分钟值的。它返回的是一个基于60分钟制的整数值,即从0到59的范围。
var date = new Date();
var minutes = date.getMinutes();
console.log(minutes); // 当前分钟的值 输出41
7.getSeconds()
getSeconds()方法是用来获取日期对象的秒值的。它返回的是一个基于60秒制的整数值,即从0到59的范围。
var date = new Date();
var seconds = date.getSeconds();
console.log(seconds); // 当前秒的值 30
8.getMilliseconds()
JavaScript中的getMilliseconds()方法是用来获取日期对象的毫秒值的。它返回的是一个基于1000毫秒制的整数值,即从0到999的范围。
var date = new Date();
var milliseconds = date.getMilliseconds();
console.log(milliseconds); // 当前毫秒的值 283
9.getTime()
getTime()方法是用来获取日期对象的时间戳的。它返回的是一个基于1970年1月1日午夜(UTC时间)至今的毫秒数。
var date = new Date();
var timestamp = date.getTime();
console.log(timestamp); // 当前时间的时间戳 1692175570784
10.getDay()
getDay()方法是用来获取日期对象中的星期几的方法。它返回一个整数,代表星期几,其中0代表星期日,1代表星期一,依此类推,6代表星期六。
var date = new Date();
var day = date.getDay();
console.log(day); // 当前日期的星期几 3
11.getUTCHours()
getUTCHours()方法是用来获取日期对象的世界协调时间(UTC)的小时部分的方法。它返回一个整数,表示当前日期对象的UTC小时。
var date = new Date();
var hours = date.getUTCHours();
console.log(hours); // 当前日期的UTC小时 8
中国相当于东8区
12.时间转字符的方法
1.toLocaleString()
将时间对象转换为本地日期和时间字符串。它接受一些可选参数,用于指定日期和时间的格式。
var date = new Date();
console.log(date.toLocaleString()); // 根据本地设置,输出日期和时间的字符串表示
console.log(date.toLocaleString("en-US")); // 输出英语美国格式的日期和时间字符串
console.log(date.toLocaleString("ja-JP")); // 输出日语日本格式的日期和时间字符串
console.log(date.toLocaleString("zh-CN"));//输出中国汉语格式的日期和时间字符串
2.toString()
将时间对象转换为表示时间的字符串。它返回一个包含日期和时间的字符串,格式会根据浏览器和操作系统的设置而有所不同。
var date = new Date();
var dateString = date.toString(); // 时间字符串
console.log(dateString);//Wed Aug 16 2023 16:59:35 GMT+0800 (中国标准时间)
3.toLocaleDateString()
用于将日期对象转换为本地化的日期字符串。
语法:date.toLocaleDateString([locales[, options]])
参数:
locales(可选):一个字符串或字符串数组,用于指定要使用的语言环境或语言环境首选项的数组。例如:“en-US"表示美国英语,“zh-CN"表示中国中文。如果未提供此参数,则使用执行代码所在的语言环境。
options(可选):一个对象,用于指定自定义的格式选项。可以包含以下属性:
weekday:字符串,表示要包含的星期几的显示方式,可选值为:“narrow”(缩写)、“short”(短格式)或"long”(完整格式)。
year:字符串,表示要包含的年份的显示方式,可选值为:“numeric”(数字年份)或"2-digit”(2位数字年份)。
month:字符串,表示要包含的月份的显示方式,可选值为:“numeric”(数字月份)、“2-digit”(2位数字月份)、“narrow”(缩写)或"short"(短格式)。
day:字符串,表示要包含的日期的显示方式,可选值为:“numeric”(数字日期)或"2-digit"(2位数字日期)。
const date = new Date();
console.log(date.toLocaleDateString("en-US")); // 输出美国英语格式的日期字符串
console.log(date.toLocaleDateString("zh-CN")); // 输出中国中文格式的日期字符串
4.toLocaleTimeString()
将日期对象转换为本地化的时间字符串。
const date = new Date();
const options = {hour: 'numeric', minute: 'numeric', second: 'numeric'};
console.log(date.toLocaleTimeString("en-US", options)); // 输出美国英语格式的时间字符串,包含小时、分钟和秒钟
13.一道关于时间的题
对于上一次看过的内容和现在的时间进行比较,小于零返回“见鬼了”,大于零小于一分钟就返回“刚刚”,大于一分钟则返回于上次看的时间。
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) {
return "刚刚"
}
else if (60 * 1000 <= asbdt && asbdt < 60 * 60 * 1000) {
// var m = Math.floor(asbdt / 1000 / 60)
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")
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)
console.log(re)
14.修改时间的设置。
我们可以将上面的方法里的get改为set,使用日期对象方法来修改时间设置。
var date1 = new Date();
date1.setDate(date1.getDate() + 1);
console.log(date1); // 输出明天的日期
var date2 = new Date();
date2.setMonth(date2.getMonth() + 1);
console.log(date2); // 输出一个月后的同一天的日期
var date3 = new Date();
date3.setHours(15);
console.log(date3); // 输出下午3点的时间
var date4 = new Date();
date4.setMilliseconds(date4.getMilliseconds() + 5000);
console.log(date4); // 输出当前时间加上5000毫秒后的时间
二.正则表达式(RegExp)内置对象
专门用来操作字符串
1.字符匹配
1.直接匹配字符
在正则表达式中直接写入要匹配的字符,例如 /a/ 表示匹配字符’a’。
var regx = /abcd/;
var regx2 = new RegExp("abc")
var str = "abcd"
console.log(regx.test(str))//输出 true
2.字符组
使用方括号 [] 来表示字符组,可以在字符组中列出多个字符,表示匹配其中任意一个字符。例如 /[abc]/ 表示匹配字符 ‘a’、‘b’ 或 ‘c’。
var regx = /[abc]/;
var str = "abcd"
console.log(regx.test(str))//输出 true
3.范围
在字符组内使用连字符 - 可以指定一个字符范围。例如 /[a-z]/ 表示匹配任意小写字母。
var regx = /[a-z]/;
var str = "abcd"
console.log(regx.test(str))//输出 true
4.反向字符组
在字符组内使用脱字符 ^ 表示反向字符组,表示匹配除了字符组内列出的字符之外的任意字符。例如 /[^0-9]/ 表示匹配任意非数字字符。
var regx = /[^0-9]/;
var str = "abcd"
console.log(regx.test(str))//输出 true
2.重复匹配
1.重复次数
使用花括号 {} 来指定重复次数。例如 /a{3}/ 表示匹配连续出现 3 次字符 ‘a’。
var regx = /a{3}/;
var str = "aaab"
console.log(regx.test(str))//输出 true
2.重复范围
使用花括号 {} 并指定最小和最大重复次数,中间使用逗号分隔。例如 /a{2,5}/ 表示匹配连续出现 2 到 5 次字符 ‘a’。
var regx = /a{2,5}/;
var str = "aab"
var str2 ="aaaaaah"
console.log(regx.test(str))//输出 true
console.log(regx.test(str2))//输出 true
3.通配符
使用星号 * 表示匹配前一个字符出现任意次数(包括 0 次)。例如 /ab*c/ 表示匹配 ‘ac’、‘abc’、‘abbc’ 等。
var regx = /ab*c/;
var str = "acab"
var str2 ="abccc"
console.log(regx.test(str))//输出 true
console.log(regx.test(str2))//输出 true
3.特殊字符
1.边界字符
使用圆括号 () 来表示边界,例如 /^abc/ 表示匹配以 ‘abc’ 开头的字符串。
var regx = /^abc/ ;
var str = "aabc"
var str2 ="abccc"
console.log(regx.test(str))//输出 flase
console.log(regx.test(str2))//输出 true
2.或字符
使用竖线 | 来表示或的关系,例如 /cat|dog/ 表示匹配 ‘cat’ 或 ‘dog’。
var regx = /cat|dog/ ;
var str = "catdog1123"
var str2 ="cat2331"
console.log(regx.test(str))//输出 true
console.log(regx.test(str2))//输出 true
3.量词字符
使用问号 ? 来表示前一个字符可选。例如 /co?l/ 表示匹配 ‘cl’ 或 ‘col’。
var regx = /co?l/ ;
var str = "cl"
var str2 ="col"
console.log(regx.test(str))//输出 true
console.log(regx.test(str2))//输出 true
4.转义字符
1.字符转义:使用反斜杠 \ 后跟要转义的字符来匹配该字符本身。例如,/./ 表示匹配一个点字符。
2.特殊字符转义:使用反斜杠 \ 后跟特殊字符的转义序列来匹配特殊字符。例如,/\d/ 表示匹配一个数字字符,/\s/ 表示匹配一个空白字符。
3.Unicode 转义:使用反斜杠 \u 后跟四位十六进制数来匹配 Unicode 字符。例如,/\u0041/ 表示匹配字符 ‘A’。
4.反向引用:使用反斜杠 \ 后跟数字 n 来引用前面的捕获组。例如,/(abc)\1/ 表示匹配 ‘abcabc’,其中 \1 引用了第一个捕获组。
需要注意的是,在JavaScript中,反斜杠 \ 本身也是一个转义字符,因此在正则表达式中使用反斜杠需要进行双重转义,即使用两个反斜杠 \ 来表示一个反斜杠字符。
例如,要匹配一个反斜杠字符本身,需要使用 / \ /。