怎么把日期转换成这种格式"2024-03-22T00:00:00+08:00"
function formatDate(date, timezoneOffset = '+08:00') {
const padZero = (num) => (num < 10 ? '0' + num : num);
const year = date.getFullYear();
const month = padZero(date.getMonth() + 1);
const day = padZero(date.getDate());
const hours = padZero(date.getHours());
const minutes = padZero(date.getMinutes());
const seconds = padZero(date.getSeconds());
return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}${timezoneOffset}`;
}
const date = new Date('2024-03-22');
console.log(formatDate(date));
或者用moment.js
npm install moment
const moment = require('moment-timezone');
function formatDateWithMoment(date, timezone = 'Asia/Shanghai') {
return moment(date).tz(timezone).format('YYYY-MM-DD[T]HH:mm:ssZ');
}
const date = new Date('2024-03-22');
console.log(formatDateWithMoment(date));
function formatDateToISO(date, timeZone) {
// 创建一个新的Date对象
let d = new Date(date);
// 获取本地时间字符串并格式化为ISO 8601格式
let options = { timeZone: timeZone, hour12: false };
let localDate = new Intl.DateTimeFormat('sv-SE', options).format(d);
let localTime = new Intl.DateTimeFormat('sv-SE', { ...options, hour: '2-digit', minute: '2-digit', second: '2-digit' }).format(d);
// 拼接日期和时间
let localISOTime = `${localDate}T${localTime}`;
// 获取时区偏移
let offset = d.getTimezoneOffset();
let sign = offset > 0 ? '-' : '+';
offset = Math.abs(offset);
let hours = String(Math.floor(offset / 60)).padStart(2, '0');
let minutes = String(offset % 60).padStart(2, '0');
return `${localISOTime}${sign}${hours}:${minutes}`;
}
// 示例使用
let date = new Date('2024-03-22T00:00:00');
console.log(formatDateToISO(date, 'Asia/Shanghai')); // 输出: 2024-03-22T00:00:00+08:00
1.将时间戳转换为'YYYY-MM-DD HH:mm:ss'格式-老方法
通过对应的年月日时分秒依次进行拼接,另外还需要对小于10的值进行处理,在前面添加字符串‘0’,转换为常见的两位数时间格式
function transformTime(timestamp = +new Date()) {
if (timestamp) {
var time = new Date(timestamp);
var y = time.getFullYear();
var M = time.getMonth() + 1;
var d = time.getDate();
var h = time.getHours();
var m = time.getMinutes();
var s = time.getSeconds();
return y + '-' + addZero(M) + '-' + addZero(d) + ' ' + addZero(h) + ':' + addZero(m) + ':' + addZero(s);
} else {
return '';
}
}
function addZero(m) {
return m < 10 ? '0' + m : m;
}
transformTime(); // "2023-01-25 15:25:28"
老方法优化思路:
new Date().toJSON获取的是格林威治时间的JSON字符串,例如:'2023-01-25T15:39:11.803Z'
转化为北京时间需要额外增加八个时区,也就是在当前时间戳的基础上增加8个小时
我们需要的是字符串前19位,再把‘T’替换为空格,就是我们需要的时间格式
function time(time = +new Date()) {
var date = new Date(time + 8 * 3600 * 1000) // 增加8小时
return date
.toJSON()
.substr(0, 19)
.replace('T', ' ')
}
time() // '2023-01-25 15:39:11'
8 回答5.8k 阅读✓ 已解决
9 回答9.2k 阅读
6 回答4.8k 阅读✓ 已解决
3 回答10.3k 阅读✓ 已解决
4 回答7.2k 阅读
5 回答7.1k 阅读✓ 已解决
5 回答8.2k 阅读
常规的日期格式转换,推荐使用dayJS封装的武器库