js怎么讲new Date()转换为标准时间?

如何将new Date()转换为标准的时间格式(YYYY-MM-DD HH:mm:ss),直接在js里面,不使用moment,也不使用getFullYear(),getMonth()这样拼接的方法。

阅读 12.3k
8 个回答
function dateFormat(time) {
    let date = new Date(time + 8 * 3600000);
    let str = date.toISOString().replace('T',' ');
    return str.substr(0, str.lastIndexOf('.'));
}
dateFormat(Date.now());

我目前使用的是new Date().toLocaleString('chinese',{hour12:false}),只是格式是YYYY/MM/DD HH:mm:ss

图片描述

new Date().toLocaleString( `default`, {
  day    : `2-digit`,
  hour   : `2-digit`,
  hour12 : false,
  minute : `2-digit`,
  month  : `2-digit`,
  second : `2-digit`,
  year   : `numeric`,
} )
  .replace( /[^\d\s\u003a]/gu, `\u002d` );
/**
 * 将 Date 转化为指定格式的String
 * 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符
 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
 * 例子:
 * (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
 * (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
 * @param dt
 * @param fmt
 * @returns {*}
 */
export function formatDateTime(dt, fmt) {
    const o = {
        'M+': dt.getMonth() + 1, // 月份
        'd+': dt.getDate(), // 日
        'h+': dt.getHours(), // 小时
        'm+': dt.getMinutes(), // 分
        's+': dt.getSeconds(), // 秒
        'q+': Math.floor((dt.getMonth() + 3) / 3), // 季度
        'S': dt.getMilliseconds() // 毫秒
    }
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (dt.getFullYear() + '').substr(4 - RegExp.$1.length))
    for (var k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
    }
    return fmt
}

这个满足需求吗

不用第三方库也不让拼接,真的可以吗。mark

比如执行 new Date().toString().split(' ') 结果会是 ["Wed", "May", "29", "2019", "22:02:58", "GMT+0800", "(China", "Standard", "Time)"] 格式是固定的 再把月份替换成数字 拼接成你需要的格式就可以了

moment 太大了,可以不考虑。但 dayjs 可以考虑一下。

clipboard.png

执行结果:

toISOString 2019-05-30T02:31:44.618Z
toUTCString Thu, 30 May 2019 02:31:44 GMT
toString() Thu May 30 2019 10:31:44 GMT+0800 (中国标准时间)
toDateString() Thu May 30 2019
toTimeString() 10:31:44 GMT+0800 (中国标准时间)
toLocaleString() 2019-5-30 10:31:44
toLocaleTimeString() 10:31:44
toLocaleDateString() 2019-5-30
format() 2019-05-30 10:31:44

完全不用拼接,着实有难度,但是自己写一个日历算法,代码量和复杂度都是不可以接受的,代码太麻烦就容易出bug

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