момент js: проверить, является ли строка датой в указанном формате c - PullRequest
0 голосов
/ 05 апреля 2020

Я получаю несколько строк, и если они являются датами, я хочу отформатировать их.

Я использую момент. js, чтобы проверить, является ли строка датой:

Только строки с этим форматом должны возвращать true: 2011-03-02T11:02:00+03:00

Однако в настоящее время эта дата также считается действительной: 034932 или эта: 279565.

Мой код:

const date = new Date(dateString);
return moment(date, moment.ISO_8601, true).isValid();

Как мне проверить это с моментом js?

Я посмотрел документацию, но не нашел ни одного определения формата, которое явно содержит смещение часового пояса.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Создайте формат, используя объект момента, а затем используйте isValid () , чтобы проверить, является ли он допустимым форматом.

var dates = ["034932", "279565", "2011-03-02T11:02:00+03:00"];
for (const val of dates) {
  let utc = moment(val, "YYYY-MM-DDTHH:mm:ssZ", true);
  let isUTC = utc.isValid();
  console.log(isUTC, val);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
0 голосов
/ 05 апреля 2020

Вам не нужно использовать new Date(dateString), если вы хотите проверить формат строки, используя момент js. Ваш код дает вводящий в заблуждение результат, потому что вы анализируете свой ввод, используя собственную дату JavaScrpt. Вы должны использовать moment(String, String, Boolean) (поэтому первый параметр должен содержать строку, а не дату Javacript).

Рабочий пример:

const isStringValidDate = (dateString) => moment(dateString, moment.ISO_8601, true).isValid();
["034932", "279565", "2011-03-02T11:02:00+03:00"].forEach((val) => console.log(val, isStringValidDate(val)))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
...