首页 > 解决方案 > 检查日期的更好方法是在今天日期之前/之后 1 到 2 天使用时刻

问题描述

如果日期是 1 或 2 天,则在日期后的接下来 1 至 2 天使用红色和绿色,否则为黑色。有没有更好的方法来做到这一点

const date = moment(apptDate).isValid() ? moment(apptDate) : '';
const dateMinus1days = date !== '' ? date.subtract(1, 'day').format('MM/DD/YYYY') : null;
const dateMinus2days = date !== '' ? date.subtract(2, 'day').format('MM/DD/YYYY') : null;
const dateAdd1days = date !== '' ? date.add(1, 'day').format('MM/DD/YYYY') : null;
const dateAdd2days = date !== '' ? date.add(2, 'day').format('MM/DD/YYYY') : null;
let color;
if (dateMinus1days && moment().format('MM/DD/YYYY') === dateMinus1days || dateMinus2days && moment().format('MM/DD/YYYY') === dateMinus2days) {
    color = 'green'
} else if (dateAdd1days && moment().format('MM/DD/YYYY') === dateAdd1days || dateAdd2days && moment().format('MM/DD/YYYY') === dateAdd2days) {
    color = 'red'
} else {
    color = 'black'
}

标签: javascriptmomentjs

解决方案


你可以使用isBetween它:

检查一个时刻是否介于其他两个时刻之间,可选择查看单位规模(分钟、小时、天等)。比赛是独家的。前两个参数将被解析为时刻,如果不是这样的话。

您的代码可能如下所示:

const getColor = (apptDate) => {
  let color = 'black';
  const date = moment(apptDate);
  const now = moment();
  const inTwoDays = moment().add(2, 'day');
  const twoDaysAgo = moment().subtract(2, 'day')
  if (date.isValid() && date.isBetween(twoDaysAgo, now, 'day', '[]')) {
    color = 'green';
  } else if (date.isValid() && date.isBetween(now, inTwoDays, 'day', '[]')) {
    color = 'red';
  }
  return color;
}

[
  moment().format(),
  moment().add(1, 'day').format(),
  moment().add(2, 'day').format(),
  moment().add(3, 'day').format(),
  moment().subtract(1, 'day').format(),
  moment().subtract(2, 'day').format(),
  moment().subtract(3, 'day').format(),
  'invalid'
].forEach((elem) => {
  console.log(elem, getColor(elem));
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>


推荐阅读