Appearance
JS实现Date() - 日期格式化的三种常用方法
1. Date() 介绍
1.1 Date() 基本使用
Date()日期对象是构造函数,必须使用new来调用我们的日期对象。
若Date()没有参数时 返回当前时间
若Date(timer)有参数时 返回参数设置的时间
参数写法:'2012-2-2 08:54:32'(字符串)
返回值格式:Sun May 28 2023 23:36:28 GMT+0800 (中国标准时间)
javaScript
// 无参数时
let dateW = new Date();
console.log('当前时间', dateW); // Sun May 28 2023 23:36:28 GMT+0800 (中国标准时间)
// 有参数时
let dateY = new Date('2012-2-2 08:54:32');
console.log('指定时间', dateY); // Thu Feb 02 2012 08:54:32 GMT+0800 (中国标准时间)
1.2 Date() 常用API
Date() 可以通过许多方法获取日期和时间的各个部分,在格式化时间时我们经常用到这些API。
javaScript
let date = new Date();
console.log(date.getFullYear()); //当前日期的年 2022
console.log(date.getMonth() + 1); //月份+1 由于月份是0-11计算 所以需要 +1
console.log(date.getDate()); // 日
console.log(date.getDay()); // 星期几 注意:星期日返回的是0
console.log(date.getHours()); // 时
console.log(date.getMinutes()); // 分
console.log(date.getSeconds()); // 秒
2. 日期格式化
2.1 toLocaleString(原生方法)
Date 对象有一个 toLocaleString 方法,该方法可以格式化日期和时间,同时衍生出另外两种分别获得日期和时间的方法。
字段说明:
日期+时间: toLocaleString()
日期: toLocaleDateString()
时间: toLocaleTimeString()
参数说明 (非必填):
'en-US', { timeZone: 'America/New_York' }
en-US : 地区设置(String)
{ timeZone: 'America/New_York' }: 日期时间格式和时区信息(Object)
javascript
let timer = new Date()
console.log(timer.toLocaleString()) // 日期+时间 2023/5/28 23:07:35
console.log(timer.toLocaleDateString()) // 日期 2023/5/28
console.log(timer.toLocaleTimeString()) // 时间 23:10:31
// 两个参数:(地区设置,日期时间格式和时区信息)
console.log(time.toLocaleString('en-US', { timeZone: 'America/New_York' }))
// 打印结果 5/28/2023, 11:08:39 AM
2.2 字符串方法
string.padStart(字符串长度, 填充元素)
: 用填充元素
填充string
字符串,使得产生的新字符串达到所设置的长度(参数一:字符串长度
)。
padStart
从原字符串左侧开始填充 padEnd
从原字符串右侧开始填充
javascript
let str = 'str'
str.padStart(5,'0') // "00str"
// 不指定填充元素时,以空字符串填充
str.padStart(5) // " abc"
// 填充元素超出指定长度时,从左->右对填充元素截取
str.padStart(6,'123465'); // "123str"
// 原字符串长度大于设定长度时,以原字符串长度为准 不截断原字符串
str.padStart(2); // "str"
2.2.1 利用字符串进行日期格式化
javascript
console.log(time.getFullYear().toString().padStart(4, '0')) // 年 2023
console.log((time.getMonth() + 1).toString().padStart(2, '0')) // 月 05
console.log(time.getDate().toString().padStart(2, '0')) // 日 29
console.log('星期' + (time.getDay() === 0 ? 7 : time.getDay())) // 周 星期1
console.log(time.getHours().toString().padStart(2, '0')) // 时 01
console.log(time.getMinutes().toString().padStart(2, '0')) // 分 19
console.log(time.getSeconds().toString().padStart(2, '0')) // 秒 55
2.2.2 格式化函数封装
javascript
let time = new Date()
// ① 定义格式化封装函数
function formaData(timer) {
const year = timer.getFullYear()
const month = timer.getMonth() + 1 // 由于月份从0开始,因此需加1
const day = timer.getDate()
const hour = timer.getHours()
const minute = timer.getMinutes()
const second = timer.getSeconds()
return `${pad(year, 4)}-${pad(month)}-${pad(day)} ${pad(hour)}:${pad(minute)}:${pad(second)}`
}
// 定义具体处理标准
// timeEl 传递过来具体的数值:年月日时分秒
// total 字符串总长度 默认值为2
// str 补充元素 默认值为"0"
function pad(timeEl, total = 2, str = '0') {
return timeEl.toString().padStart(total, str)
}
// 调用函数
console.log(formaData(time)) // 2023-05-29 00:30:19
// ② 定义格式化封装函数
const formatTimeToStr = (times: Date | string | number, pattern: string) => {
var date = new Date(times);
var year = String(date.getFullYear());
var month = String(date.getMonth() + 1).padStart(2, "0");
var day = String(date.getDate()).padStart(2, "0");
var hours = String(date.getHours()).padStart(2, "0");
var minutes = String(date.getMinutes()).padStart(2, "0");
var seconds = String(date.getSeconds()).padStart(2, "0");
if (pattern) {
pattern = pattern.replace("yyyy", year);
pattern = pattern.replace("MM", month);
pattern = pattern.replace("dd", day);
pattern = pattern.replace("hh", hours);
pattern = pattern.replace("mm", minutes);
pattern = pattern.replace("ss", seconds);
} else {
pattern = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
return pattern;
};
// times 示例:
// Date 对象:
const date = new Date(); // 当前时间
formatTimeToStr(date, 'yyyy-MM-dd'); // 输出: "2023-10-26"
// 字符串:
const dateString = "2024-01-15T10:30:00";
formatTimeToStr(dateString, 'yyyy年MM月dd日'); // 输出: "2024年01月15日"
// 数字 (时间戳):
const timestamp = 1732652800000; // 表示 2025-01-27 00:00:00 UTC
formatTimeToStr(timestamp, 'MM/dd/yyyy'); // 输出: "01/27/2025"
// pattern 示例:
const now = new Date();
formatTimeToStr(now, 'yyyy-MM-dd'); // 输出: "2023-10-26"
formatTimeToStr(now, 'MM/dd/yyyy hh:mm:ss'); // 输出: "10/26/2023 17:15:30"
formatTimeToStr(now, 'yyyy年MM月dd日 hh时mm分'); // 输出: "2023年10月26日 17时15分"
formatTimeToStr(now); // pattern 为空,使用默认格式: "2023-10-26 17:15:30"
2.3 第三方库
除了以上方法外,还有很多第三方库可以用来格式化日期时间,最常用的主要为 Moment.js。
2.3.1 安装 Moment.js
javascript
npm install moment
2.3.2 导入 Moment.js 模块(main.js)
javascript
import moment from 'moment';
Vue.prototype.$moment = moment
2.3.3 格式化时间
javascript
// `this.$moment()` 输出当前时间的moment对象
console.log(this.$moment().format('YYYY-MM-DD HH:mm:ss')); // 2023-05-29 00:30:19