Js日期

将日期存储为毫秒

JavaScript 将日期存储为自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)以来的毫秒数。

零时间是 1970 年 1 月 1 日 00:00:00 UTC。

显示

在 HTML 中显示日期对象时,会使用 toString() 方法自动转换为字符串。

1
2
d = new Date();
document.getElementById("demo").innerHTML = d;

toUTCString()方法将日期转换为 UTC 字符串(一种日期显示标准)

1
document.getElementById("demo").innerHTML = d.toUTCString();

toDateString()方法将日期转换为更易读的格式:

1
2
document.getElementById("demo").innerHTML = d.toDateString();
//Tue Aug 11 2020

日期获取方法

方法 描述
getDate() 以数值返回天(1-31)
getDay() 以数值获取周名(0-6)
getFullYear() 获取四位的年(yyyy)
getHours() 获取小时(0-23)
getMilliseconds() 获取毫秒(0-999)
getMinutes() 获取分(0-59)
getMonth() 获取月(0-11)
getSeconds() 获取秒(0-59)
getTime() 获取时间(从 1970 年 1 月 1 日至今的毫秒数)

设置日期的方法

setDate() 以数值(1-31)设置日
setFullYear() 设置年(可选月和日)
setHours() 设置小时(0-23)
setMilliseconds() 设置毫秒(0-999)
setMinutes() 设置分(0-59)
setMonth() 设置月(0-11)
setSeconds() 设置秒(0-59)
setTime() 设置时间(从 1970 年 1 月 1 日至今的毫秒数)
1
2
3
4
5
<script>
var d = new Date();
d.setFullYear(2020/*, 11, 3*/); //日期从0开始
document.getElementById("demo").innerHTML = d;
</script>

日期比较

1
2
3
4
5
6
7
8
9
10
11
var today, someday, text;
today = new Date();
someday = new Date();
someday.setFullYear(2049, 0, 16);

if (someday > today) {
text = "今天在 2049 年 1 月 16 日之前";
} else {
text = "今天在 2049 年 1 月 16 日之后";
}
document.getElementById("demo").innerHTML = text;

JS数学

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Math.PI;            // 返回 3.141592653589793
Math.round(x); // 返回 x 四舍五入为最接近的整数
Math.pow(x, y) // x 的 y 次幂
Math.sqrt(x) // 返回 x 的平方根
Math.abs(x) // 返回 x 的 绝对值
Math.LN2 // 返回 2 的自然对数
Math.LN10 // 返回 10 的自然对数
Math.LOG2E // 返回以 2 为底的 e 的对数(约等于 1.414)

Math.ceil(x) // 返回 x 的上舍入最接近的整数
Math.floor(x) // 返回 x 的下舍入最接近的整数

Math.sin(x) // 返回角 x(以弧度计)的正弦
Math.asinx(x) // 返回 x 的反正弦值,以弧度计
Math.max(0, 450, 35, 10) // 查找参数列表中的最低或最高值

Math.random() // 返回介于 0(包括) 与 1(不包括) 之间的随机数
Math.floor(Math.random() * 11); // 返回 0 至 10 之间的整数

Js 比较

如果将字符串与数字进行比较,那么在做比较时 JavaScript 会把字符串转换为数值。空字符串将被转换为 0。非数值字符串将被转换为始终为false NaN

为了确保正确的结果,在比较值前应该把变量转换为合适的类型:

1
age = Number(age);

switch语句

1
2
3
4
5
6
7
switch(表达式) {
case n:
代码块
break;
default: // 不必是 switch 代码块中最后一个 case
默认代码块
}

不同的case使用相同的代码快:

1
2
3
4
5
6
7
8
9
10
11
12
switch (new Date().getDay()) {
case 4:
case 5:
text = "周末快到了:)";
break;
case 0:
case 6:
text = "今天是周末~";
break;
default:
text = "期待周末!";
}

Js 类型转换

有五种可包含值的数据类型:

  • 字符串(string)
  • 数字(number)
  • 布尔(boolean)
  • 对象(object)
  • 函数(function)

有三种对象类型:

  • 对象(Object)
  • 日期(Date)
  • 数组(Array)

同时有两种不能包含值的数据类型:

  • null
  • undefined

请注意:

  • NaN 的数据类型是数值
  • 数组的数据类型是对象
  • 日期的数据类型是对象
  • null 的数据类型是对象
  • 未定义变量的数据类型是 undefined
  • 尚未赋值的变量的数据类型也是 undefined

constructor 属性

1
2
3
4
5
6
7
"Bill".constructor            // 返回 "function String()  { [native code] }"
(3.14).constructor // 返回 "function Number() { [native code] }"
false.constructor // 返回 "function Boolean() { [native code] }"
[1,2,3,4].constructor // 返回 "function Array() { [native code] }"
{name:'Bill', age:62}.constructor // 返回" function Object() { [native code] }"
new Date().constructor // 返回 "function Date() { [native code] }"
function () {}.constructor // 返回 "function Function(){ [native code] }"

可以通过检查constructor属性来确定某个对象是否为数组/日期

1
2
3
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}

或者检察对象是否是数组函数:

1
2
3
4
5
6
7
function isArray(myArray) {
return myArray.constructor === Array;
}

function isDate(myDate) {
return myDate.constructor === Date;
} // 检查对象是否是日期函数

String() 把 * 转换为字符串

1
2
3
4
5
6
7
8
String(x)         // 从数值变量 x 返回字符串
String(123) // 从数值文本 123 返回字符串
String(100 + 23) // 从表达式中的数值返回字符串

String(false) // 返回 "false"
String(true) // 返回 "true"

String(Date()) // 把日期转换为字符串

数字方法toString()同理。

1
x.toString()

Number()把 * 转换为数字

1
2
3
4
Number("3.14")    // 返回 3.14
Number(" ") // 返回 0
Number("") // 返回 0
Number("99 88") // 返回 NaN

一元 + 运算符 把变量转换为数字

1
2
3
var y = "5";      // y 是字符串
var x = + y; // x 是数字
// 如果无法转换变量,则仍会成为数字,但是值为 NaN

自动类型转换

1
2
3
4
5
5 + null    // 返回 5         因为 null 被转换为 0
"5" + null // 返回 "5null" 因为 null 被转换为 "null"
"5" + 2 // 返回 52 因为 2 被转换为 "2"
"5" - 2 // 返回 3 因为 "5" 被转换为 5
"5" * "2" // 返回 10 因为 "5" 和 "2" 被转换为 5 和 2

JavaScript 正则表达式

正则表达式是构成搜索模式(search pattern)的字符序列。 可用于执行所有类型的文本搜索文本替换操作。

语法

1
/pattern/modifiers;

搭配字符串方法

正则表达式常用于两个字符串方法:search() 和 replace()。

search() 方法使用表达式来搜索匹配,然后返回匹配的位置。replace() 方法返回模式被替换处修改后的字符串。

1
2
var str = "Visit Microsoft!";
var res = str.replace(/microsoft/i, "W3School");

修饰符可用于大小写不敏感的更全局的搜素:

修饰符 描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。

正则表达式模式

括号用于查找一定范围内的字符串

表达式 描述
[abc] 查找方括号之间的任何字符。
[0-9] 查找任何从 0 至 9 的数字
(x|y) 查找由 | 分隔的任何选项。

元字符(Metacharacter)是拥有特殊含义的字符:

元字符 描述
\d 查找数字。
\s 查找空白字符。
\b 匹配单词边界。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

量词:

量词 描述
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。

test()通过模式来搜索字符串,然后根据结果返回 true 或 false

1
2
var patt = /e/;
patt.test("The best things in life are free!"); // 返回 true

exec()方法 通过指定的模式(pattern)搜索字符串,并返回已找到的文本

1
/e/.exec("The best things in life are free!");		// 返回 e