时间戳转日期格式

472 阅读3分钟

写一个方法接受时间戳,然后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 而定。例子如下:

 
  1. const date = new Date();
  2. date.toLocaleString('zh', { hour12: true }); //2018/4/4 下午6:57:36
  3. date.toLocaleString('zh', { hour12: false }); //2018/4/4 18:57:36
  4. 复制代码

之后就是格式化年月日时分秒星期等选项了,MDN 文档说必须按照一定的分组设置属性,实际使用中发现每个属性单独使用并不报错,因而按属性的值分开介绍会比较好理解。

具体的属性一共有 9 个,分别是 weekdayerayearmonthdayhourminutesecond 与 timeZoneName。具体的意思,看单词估计就能秒懂,不作过多解释。然而需要留意的是他们的可选值。先讨论weekday 与 era,它们均可以取值为 narrowshort 或 long,简单说就是能有多短多短,缩写与正常表现,具体表现如下:

 
  1. const date = new Date();
  2. date.toLocaleString('en', { weekday: 'narrow', era: 'narrow' }); //W A
  3. date.toLocaleString('en', { weekday: 'short', era: 'short' }); //Wed AD
  4. date.toLocaleString('en', { weekday: 'long', era: 'long' }); //Wednesday Anno Domini
  5. 复制代码

跟着是 timeZoneName 属性,这个属性只有short 或 long 两个值,表现如下:

 
  1. const date = new Date();
  2. date.toLocaleString('zh', { timeZoneName: 'short' }); //2018/4/5 GMT+8 下午7:18:26
  3. date.toLocaleString('zh', { timeZoneName: 'long' }); //2018/4/5 中国标准时间 下午7:18:26
  4. 复制代码

剩下的属性,均可以取值为 numeric 与 2-digit,简单说就是否仅用两位数字表示,看码说话:

 
  1. const date = new Date();
  2. date.toLocaleString('zh', { year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric', }); //2018/4/5 下午7:30:17
  3. date.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
  4. 复制代码

(比较奇怪的是 hourminute 与 second 三个属性,无论设置为何值,表现都是一样的,希望有大佬告知原因,我换成 en 环境也是一样的。)

最后是 month 这个属性,语言对月份有不同的展现,除去 numeric 与 2-digit 外,它额外多三个属性,分别是 narrowshort 与 long。展示如下:

 
  1. const date = new Date();
  2. date.toLocaleString('en', { month: 'narrow' }); //A
  3. date.toLocaleString('en', { month: 'short' }); //Apr
  4. date.toLocaleString('en', { month: 'long' }); //April
  5.