猿问

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

我有一些从 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 的日期,所以需要它是一个灵活的函数。


九州编程
浏览 143回答 4
4回答

人到中年有点甜

如果输入字符串总是格式良好的 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"])

拉莫斯之舞

我会使用支持我的日期的方法: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));

HUWWW

尝试: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))

梦里花落0921

为什么你不能创建一个函数并重用它?例子: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)));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答