写一个方法接受时间戳,然后return出来吧
这里我们需要注意一个地方,是需要24小时制?还是12小时制呢。 12小时制会出现上午和下午 根据不同场景不同输出
function changeTimeStamp(timeStamp) {
return new Date(timeStamp).toLocaleString('chinese', { hour12: false }).replace(/\//g, '-')
}
var a = changeTimeStamp(new Date().getTime())
console.log(a) // 2019-8-16 15:08:53
如果是12 小时制的需求呢,将toLocaleString()里面hour12改为true 注:默认是12小时制
有些场景我们是需要 yy-mm-dd 格式的时间 这种方法显然不妥
function changeTimeStamp(timeStamp){
let getDate = new Date(timeStamp)
let year = getDate .getFullYear()
let month = getDate.getMonth()+1
month = month < 10 ? '0'+month : month
let day = getDate.getDate()
day = day < 10 ? '0'+day : day
return [year,month,day].join('-')
}
Date.prototype.toLocaleString
与数字类型不同,日期类型的 locales 对输出的影响十分之大(其实数字类型影响也大,只是一般用不到),因而应该根据实际情况选择合适的语言环境。一般而言,日期显示是有要求的,样式方面需要统一。但如果是内部项目或者是 pm 允许,那么使用 toLocaleString 格式化日期就相当好了。与数字类型一样,只介绍常用属性,详细的属性介绍请查阅MDN文档。
hour12 表示是使用十二小时制还是二十四小时制,默认值视 locales 而定。例子如下:
const date = new Date();date.toLocaleString('zh', { hour12: true }); //2018/4/4 下午6:57:36date.toLocaleString('zh', { hour12: false }); //2018/4/4 18:57:36复制代码
之后就是格式化年月日时分秒星期等选项了,MDN 文档说必须按照一定的分组设置属性,实际使用中发现每个属性单独使用并不报错,因而按属性的值分开介绍会比较好理解。
具体的属性一共有 9 个,分别是 weekday、era、year、month、day、hour、minute、second 与 timeZoneName。具体的意思,看单词估计就能秒懂,不作过多解释。然而需要留意的是他们的可选值。先讨论weekday 与 era,它们均可以取值为 narrow、short 或 long,简单说就是能有多短多短,缩写与正常表现,具体表现如下:
const date = new Date();date.toLocaleString('en', { weekday: 'narrow', era: 'narrow' }); //W Adate.toLocaleString('en', { weekday: 'short', era: 'short' }); //Wed ADdate.toLocaleString('en', { weekday: 'long', era: 'long' }); //Wednesday Anno Domini复制代码
跟着是 timeZoneName 属性,这个属性只有short 或 long 两个值,表现如下:
const date = new Date();date.toLocaleString('zh', { timeZoneName: 'short' }); //2018/4/5 GMT+8 下午7:18:26date.toLocaleString('zh', { timeZoneName: 'long' }); //2018/4/5 中国标准时间 下午7:18:26复制代码
剩下的属性,均可以取值为 numeric 与 2-digit,简单说就是否仅用两位数字表示,看码说话:
const date = new Date();date.toLocaleString('zh', { year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric', }); //2018/4/5 下午7:30:17date.toLocaleString('zh', { year: '2-digit', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }); //18/04/05 下午7:30:17复制代码
(比较奇怪的是 hour、minute 与 second 三个属性,无论设置为何值,表现都是一样的,希望有大佬告知原因,我换成 en 环境也是一样的。)
最后是 month 这个属性,语言对月份有不同的展现,除去 numeric 与 2-digit 外,它额外多三个属性,分别是 narrow、short 与 long。展示如下:
const date = new Date();date.toLocaleString('en', { month: 'narrow' }); //Adate.toLocaleString('en', { month: 'short' }); //Aprdate.toLocaleString('en', { month: 'long' }); //April