使用序数后缀格式化日期

3
我想将我的日期格式化为如下形式,例如:2019年5月2日 星期四
我创建了以下函数:

function convertDateToString(date) {
  let monthNames = [
    "January", "February", "March",
    "April", "May", "June", "July",
    "August", "September", "October",
    "November", "December"
  ];

  let dayNames = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

  let dayIndex = date.getDate();
  let monthIndex = date.getMonth();
  let year = date.getFullYear();

  return dayNames[dayIndex] + ', ' + monthNames[monthIndex] + ' ' + dayIndex + ' ' + year;
}

let date = new Date()

console.log(convertDateToString(date));

// wanted format: Thursday, May 2nd 2019

但是,我不确定如何在日期后面添加序数后缀。我目前只得到完整的数字,而不是 1st2nd 等等。

有什么建议可以添加这个内容吗?

感谢您的回复!

4个回答

2
你可以创建一个函数,它接收一个月份中的日,例如2,并返回适当的后缀,例如nd(对于1(或21或31)的情况下为st,对于3(或23)的情况下为rd,对于其他所有情况为th)。这里是最初的回答:

const getSuffix = (num) => {
  const suffixes = {
    '1': 'st',
    '21': 'st',
    '31': 'st',
    '2': 'nd',
    '22': 'nd',
    '3': 'rd',
    '23': 'rd'
  };
  return suffixes[num] || 'th';
};
function convertDateToString(date) {
  let monthNames = [
    "January", "February", "March",
    "April", "May", "June", "July",
    "August", "September", "October",
    "November", "December"
  ];

  let dayNames = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

  let dayIndex = date.getDate();
  let monthIndex = date.getMonth();
  let year = date.getFullYear();

  return dayNames[dayIndex] + ', ' + monthNames[monthIndex] + ' ' + dayIndex + getSuffix(dayIndex) + ' ' + year;
}

let date = new Date()

console.log(convertDateToString(date));

// wanted format: Thursday, May 2nd 2019


2

// Takes a number and return with ordinal suffix
const ordinal = (n) => {
  const s = ['th', 'st', 'nd', 'rd'];
  const m = n % 100;
  return n + (s[(m - 20) % 10] || s[m] || s[0]);
};

// See for yourself
for (let i = 1; i < 50; i++) {
    console.log(ordinal(i));
}


非常有用,适用于每月的第49天。 - Eric Ferreira
显然这只是一个部分解决方案 - 而且验证日期的责任不应该由这个函数承担。 - ankr
只是逗你玩,哈哈。这是我选择的那一个。 - undefined

1
你可以创建一个后缀数组。

function convertDateToString(date) {
  let monthNames = [
    "January", "February", "March",
    "April", "May", "June", "July",
    "August", "September", "October",
    "November", "December"
  ];
  let suffix = ['st','nd','rd',...Array(13).fill('th'),'st','nd','rd',Array(7).fill('th'),'st']
  let dayNames = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

  let dayIndex = date.getDate();
  let monthIndex = date.getMonth();
  let year = date.getFullYear();

  return dayNames[dayIndex] + ', ' + monthNames[monthIndex] + ' ' + dayIndex + suffix[dayIndex-1] + ' ' + year;
}

let date = new Date()

console.log(convertDateToString(date));

// wanted format: Thursday, May 2nd 2019


1
值得注意的是,任何时候处理日期时,都应该考虑使用 Moment.js - 它是一个可以使得处理日期变得更加简单的库。
您可以按照以下方式格式化您的显示:

function convertDateToString(date) {
  return moment(date)
    .format("dddd, MMMM Do YYYY")
}

let date1 = new Date("2019-05-01T10:00:00")
let date2 = new Date("2019-05-02T10:00:00")
let date3 = new Date("2019-05-03T10:00:00")
let date4 = new Date("2019-05-04T10:00:00")

console.log(convertDateToString(date1));
console.log(convertDateToString(date2));
console.log(convertDateToString(date3));
console.log(convertDateToString(date4));

// wanted format: Thursday, May 2nd 2019
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

如需更多格式选项,您可以查看文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接