前端日期转换?

怎么把日期转换成这种格式"2024-03-22T00:00:00+08:00"

阅读 8.4k
4 个回答

常规的日期格式转换,推荐使用dayJS封装的武器库

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'
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏