如何用JavaScript获取yyyy-mm-dd HH:mm:ss格式的UTC当前时间字符串
问题原因
Intl.DateTimeFormat 默认使用运行环境的本地时区执行时间格式化,未指定时区的情况下输出的就是本地时间,只要在配置项中补充timeZone: 'UTC'即可得到UTC格式的时间字符串。
修改后代码
let datenow = new Date; console.log(datenow); // "2021-07-28T18:11:11.282Z" console.log(generateDatabaseDateTime(datenow)); // 输出 "2021-07-28 18:11:11" 符合预期 function generateDatabaseDateTime(date) { const p = new Intl.DateTimeFormat('en', { year:'numeric', month:'2-digit', day:'2-digit', hour:'2-digit', minute:'2-digit', second:'2-digit', hour12: false, timeZone: 'UTC' // 新增UTC时区配置 }).formatToParts(date).reduce((acc, part) => { acc[part.type] = part.value; return acc; }, {}); return `${p.year}-${p.month}-${p.day} ${p.hour}:${p.minute}:${p.second}`; }
更简洁的替代方案
如果不需要复杂的多语言适配,不需要引入IntlAPI,直接处理Date的UTC属性或者toISOString结果即可实现相同效果:
// 方案1:直接调用UTC属性拼接 function generateDatabaseDateTime(date) { const pad = num => String(num).padStart(2, '0') return `${date.getUTCFullYear()}-${pad(date.getUTCMonth()+1)}-${pad(date.getUTCDate())} ${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}` } // 方案2:切割ISO字符串,代码最少 function generateDatabaseDateTime(date) { return date.toISOString().slice(0, 19).replace('T', ' ') }
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

