为了账号安全,请及时绑定邮箱和手机立即绑定

使用 vanilla javascript 格式化日期而不使用包

使用 vanilla javascript 格式化日期而不使用包

九州编程 2022-07-15 09:59:58
我有一些从 API 中获取的日期,格式如下1960-06-21。我想编写一个将日期格式化为 this 的函数21 June 1960。网上有很多人建议只使用诸如 moment.js 之类的库,但如果可能的话,我想尝试只使用 JavaScript,使用最现代的功能。这甚至可能吗?我找到了转换单个日期的解释const d = new Date('1993-10-30');  const dtf = new Intl.DateTimeFormat('en', {    year: 'numeric',    month: 'long',    day: '2-digit',  });  const [{ value: mo }, , { value: da }, , { value: ye }] = dtf.formatToParts(    d  );  console.log(`${da} ${mo} ${ye}`);// 30 October 1993但是这个例子只需要一个日期,我有 100 个来自 API 的日期,所以需要它是一个灵活的函数。
查看完整描述

4 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

如果输入字符串总是格式良好的 ISO 8601 日期,那么使用输入字符串相当简单:


const monthNames = [

  'January', 'February', 'March',     'April',   'May',      'June',

  'July',    'August',   'September', 'October', 'November', 'December'

]


const reformatDate = (iso) => {

  const [year, month, day] = iso.split('-')

  return `${Number(day)} ${monthNames[Number(month) - 1]} ${year}`

}


console .log (

  reformatDate ('1960-06-21')  //~> "21 June 1960"

)


// Or to do a list of dates:

const dates = ['1865-04-15', '1881-07-02', '1901-09-19', '1963-11-22']

console .log (

  dates .map (reformatDate)

  //~> ["15 April 1865", "2 July 1881", "19 September 1901", "22 November 1963"]

)


查看完整回答
反对 回复 2022-07-15
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

我会使用支持我的日期的方法:


function df(date){

  const m = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

  return date.getUTCDate()+' '+m[date.getUTCMonth()]+' '+date.getUTCFullYear();

}

const dt = new Date('1960-06-21');

console.log(df(dt));


查看完整回答
反对 回复 2022-07-15
?
HUWWW

TA贡献1874条经验 获得超12个赞

尝试:


const dt = new Date('1960-06-21');


const convert = (date) =>{

    const dateArr = date.toString().split(' ')

    return dateArr[2] +' '+dateArr[1] +' '+dateArr[3]

}


console.log(convert(dt))


查看完整回答
反对 回复 2022-07-15
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

为什么你不能创建一个函数并重用它?


例子:


const dtf = new Intl.DateTimeFormat('en', {

  year: 'numeric',

  month: 'long',

  day: '2-digit',

  timeZone: 'UTC'

});


function formatDate(date, format) {

  const [{ value: mo }, , { value: da }, , { value: ye }] = format.formatToParts(date);


  return `${da} ${mo} ${ye}`;

}


const dates = ['1993-10-30', '2003-10-29', '1999-12-30'];


console.log(dates

  .map(date => Date.parse(date))

  .map(date => formatDate(date, dtf))

);


查看完整回答
反对 回复 2022-07-15
  • 4 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信