时间戳

时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数,也被称为 Unix 时间戳(Unix Timestamp)。Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。

  • 一天有 24*60*60 秒,即 86400

  • 一天有 24*60*60*1000 微秒,即 86400000 微秒

13位 - 毫秒

🔵php

利用microtime(true),返回例如:1681910251.4386,乘1000取整数

1
2
//当前时间戳
intval(microtime(true)*1000)

🟢js

1
2
3
4
//当前时间戳
+new Date()
new Date().getTime()
Date.now()

10位 - 秒

🔵php

1
time();//1681909235

🟢js

parseInt()方法:抛去小数部分,不管小数部分是多少,只取整数部分

Math.floor()方法:向下取整,不管小数部分是多少,整数部分值都不变,只取整数部分

1
2
3
4
5
6
//1681910897
parseInt(+new Date()/1000)
parseInt(new Date().getTime()/1000);
Date.parse(new Date())/1000)
parseInt(Date.now()/1000)
Math.floor(Date.now() / 1000)

日期格式化

🔵php

1
2
3
4
5
6
7
8
9
10
11
12
//目标格式:分隔符可以随意字符或者不填; 时间戳必须为10位(秒),不填默认为当前时间戳
date('目标格式','时间戳')

// 2023-04-19
date('Y-m-d')
// 2023-04-19 23:02:15
date("Y-m-d H:i:s")
// 19
date("d")

//过去时间戳格式化
date("Y-m-d H:i:s",'1681909235')

常用表示日期的字符 详见php.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**********年月日周**********/
Y - 完整表示年份(四位数字:2019
y - 表示年份(两位数字:19

m - 表示月份,有前导0(数字:04
n - 表示月份,无前导0(数字:4

d - 表示月份中的第几天,有前导001-31
j - 表示月份中的第几天,无前导01-31

D - 表示星期几(3字母:Wed)
l - 表示星期几(完整英文:Wednesday)

w - 表示星期中的第几天(数字,0表示星期天)
W - 表示一年中的第几周
z - 表示一年中的第几天(0-366
/**********小时分秒**********/
H - 24小时格式,有前导00818
G - 24小时格式,无前导0917
h - 12小时格式,有前导00611
g - 12小时格式,无前导0612

i - 表示分钟,有前导000-59
s - 表示秒,有前导000 -59

A - 大写的午前和午后(AM 或 PM)
a - 小写的午前和午后(am 或 pm)
I - 判断是否为夏令时

🟢js:需要自己封装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**
* 将时间戳格式化为指定日期时间格式的字符串
* @param {string} format 日期时间格式字符串,类似php中的date()
* @param {number} timestamp 时间戳,10位(秒)或者13位(毫秒),默认为当前时间戳
* @returns {string} 格式化后的日期时间字符串
*/
function dateFormat(format, timestamp = Date.now()) {
// 判断传入的时间戳是否是13位
if (timestamp.toString().length === 10) {
timestamp = timestamp * 1000
}

// 创建一个新的 Date 对象
const date = new Date(timestamp);

// 定义日期时间格式字符串中各个字符对应的格式化函数
const formats = {
'Y': date.getFullYear(), // 年份四位,2023
'y': date.getFullYear().toString().slice(-2), // 年份两位,23
'm': ('0' + (date.getMonth() + 1)).slice(-2), // 月份带前导,01-12
'n': date.getMonth() + 1, // 月份,1-12
'd': ('0' + date.getDate()).slice(-2), // 日期带前导,01-31
'j': date.getDate(), // 日期,1-31
'H': ('0' + date.getHours()).slice(-2), // 24小时制带前导,01-24
'h': ('0' + (date.getHours() % 12 || 12)).slice(-2), // 12小时制带前导,01-12
'i': ('0' + date.getMinutes()).slice(-2), // 分钟带前导,01-60
's': ('0' + date.getSeconds()).slice(-2), // 秒数带前导,01-59
'a': date.getHours() >= 12 ? 'pm' : 'am', // 小写的午前和午后(am 或 pm)
'A': date.getHours() >= 12 ? 'PM' : 'AM', // 大写的午前和午后(AM 或 PM)
};

// 将格式字符串中各个字符替换为对应的日期时间格式
let formattedDate = format;
for (const key in formats) {
if (Object.prototype.hasOwnProperty.call(formats, key)) {
formattedDate = formattedDate.replace(key, formats[key]);
}
}

// 返回格式化后的日期时间字符串
return formattedDate;
}

使用封装的dateFormat

1
2
3
4
//使用方法同php中的date()格式化
const d = dateFormat('Y@m@d H:i:s');
// 输出:2023@04@20 01:50:24
console.log(d);