Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

moment().isValid returns true when the input is in integers

Code:

  let modifiedValue = attribute_value;
  let isISOFormat = moment(new Date(attribute_value), moment.ISO_8601, true).isValid();
  if (isISOFormat) {
    modifiedValue = formatDateShortCustom(moment(attribute_value).toDate());
  }
  return modifiedValue;
};

In the code above, the attribute value can have

  1. 2021-09-29T18:30:00.000Z
  2. 080921

I want to make sure that when the attribute_value is in (1) format the code
modifiedValue = formatDateShortCustom(moment(attribute_value).toDate()); should execute.

However, this numerical string is also causing the isISOFormat as true hence navigating the formatDateShortCustom method, which I don't want?

Is there anything I am doing wrong?

like image 778
kunal kampassi Avatar asked Oct 27 '25 04:10

kunal kampassi


2 Answers

I'd suggest wrapping this in a function isISOFormat() and using this to decide whether your input is an ISO 8601 date string.

I'd also suggest passing the input directly to the moment() constructor, rather than creating a Date first:

let attribute_values = ['2021-09-28T11:45:00Z', new Date().toISOString(), 20, null, '28/09/2021', 'is this a date?'];

function testIsISOFormat() {
    for(let attribute_value of attribute_values) {
        console.log(`isISOFormat(${attribute_value}):`, isISOFormat(attribute_value));
    }
}

function isISOFormat(input) {
    return moment(input, moment.ISO_8601, true).isValid();
}

console.log('Testing isISOFormat:');
testIsISOFormat()
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
like image 85
Terry Lennox Avatar answered Oct 29 '25 18:10

Terry Lennox


I'd suggest wrapping this in a function isISOFormat() and using this to decide whether your input is an ISO 8601 date string.

I'd also suggest passing the input directly to the moment() constructor, rather than creating a Date first:

let attribute_values = ['2021-09-28T11:45:00Z', new Date().toISOString(), 20, null, '28/09/2021', 'is this a date?'];

function testIsISOFormat() {
    for(let attribute_value of attribute_values) {
        console.log(`isISOFormat(${attribute_value}):`, isISOFormat(attribute_value));
    }
}

function isISOFormat(input) {
    return moment(input, moment.ISO_8601, true).isValid();
}

console.log('Testing isISOFormat:');
testIsISOFormat()
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
like image 20
Terry Lennox Avatar answered Oct 29 '25 19:10

Terry Lennox



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!