Karam
Karam

Reputation: 336

Better way to check date is before/after 1 to 2 days to todays date using moment

If date is 1 or 2 days away use color red and green for the next 1 to 2 days after date otherwise black. Is there a better way of doing this

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'
}

Upvotes: 0

Views: 55

Answers (1)

VincenzoC
VincenzoC

Reputation: 31482

You can use isBetween that:

Check if a moment is between two other moments, optionally looking at unit scale (minutes, hours, days, etc). The match is exclusive. The first two arguments will be parsed as moments, if not already so.

Your code could be like the following:

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>

Upvotes: 3

Related Questions