Метод getISOFormatDate

Метод Cleave.js getISOFormatDate применяется для получения даты в стандартизированном формате ISO-8601 на основе текущего значения, управляемого экземпляром форматтера. В контексте библиотеки он рассматривается как вспомогательный механизм нормализации дат, когда пользовательский ввод преобразуется из локального или частично форматированного представления в строго структурированную строку.

Основная задача заключается в преобразовании внутреннего значения даты, которое может храниться в пользовательском формате (например, DD/MM/YYYY, MM-DD-YYYY или смешанном вводе), в ISO-строку вида YYYY-MM-DD.

Ключевая особенность заключается в отделении визуального представления данных от их логического значения. В интерфейсе данные могут отображаться в удобном локальном формате, но для хранения, передачи в API или обработки на сервере требуется унифицированный формат.

Метод выполняет следующие функции:

  • нормализация даты из форматированного ввода;
  • приведение к ISO-8601 (YYYY-MM-DD);
  • устранение локальных различий в порядке компонентов даты;
  • подготовка значения для сериализации;
  • обеспечение совместимости с backend-системами и базами данных.

Логика преобразования

Внутренний процесс работы строится вокруг разбиения форматированной строки на компоненты даты и их последующего перестроения.

Типовой алгоритм:

  1. Извлечение текущего значения из состояния экземпляра.
  2. Определение активного формата даты (например, через опции конфигурации).
  3. Разделение строки на компоненты: день, месяц, год.
  4. Проверка корректности значений (диапазоны, наличие всех частей).
  5. Перестановка компонентов в порядок YYYY-MM-DD.
  6. Формирование итоговой строки.

Если исходное значение неполное или содержит некорректные символы, результат либо нормализуется частично, либо возвращается пустая строка.

Структура возвращаемого значения

Метод всегда возвращает строку. В случае валидного ввода результат соответствует ISO 8601:

YYYY-MM-DD

Примеры:

  • 12/08/20262026-08-12
  • 01-02-20252025-02-01
  • 2024.11.30 (при распознавании формата) → 2024-11-30

При отсутствии валидных данных результатом может быть:

""

Связь с внутренним состоянием

В рамках Cleave.js значение, используемое getISOFormatDate, берётся из уже отформатированного состояния экземпляра, а не напрямую из DOM-элемента.

Это означает:

  • метод не анализирует сырые keystrokes;
  • используется уже нормализованное представление;
  • поведение зависит от текущих настроек форматирования.

Таким образом, корректность результата напрямую определяется тем, как был сконфигурирован экземпляр форматтера.

Пример базового использования

const cleave = new Cleave('#date-input', {
    date: true,
    delimiter: '/',
    datePattern: ['d', 'm', 'Y']
});

// получение ISO-формата
const isoDate = cleave.getISOFormatDate();
console.log(isoDate); // 2026-08-12

В данном примере вводимое значение интерпретируется как дата с порядком день/месяц/год, после чего преобразуется в стандартизированную строку.

Работа с различными форматами

Поведение метода зависит от конфигурации datePattern.

Формат DMY

datePattern: ['d', 'm', 'Y']

Ввод:

31/12/2025

Результат:

2025-12-31

Формат MDY

datePattern: ['m', 'd', 'Y']

Ввод:

12/31/2025

Результат:

2025-12-31

Формат YMD

datePattern: ['Y', 'm', 'd']

Ввод:

2025/12/31

Результат:

2025-12-31

Обработка неполных данных

При неполном вводе метод демонстрирует предсказуемое поведение:

  • отсутствующий день → результат пустой или частичный;
  • отсутствующий месяц → невозможность формирования ISO;
  • отсутствующий год → полная невозможность преобразования.

Примеры:

Ввод:

12/08/

Результат:

""

Ввод:

12//

Результат:

""

Такое поведение обусловлено необходимостью строгого соответствия ISO-формату.

Валидация значений

Перед формированием строки выполняется проверка:

  • день ∈ [1, 31]
  • месяц ∈ [1, 12]
  • год имеет допустимую длину (обычно 4 цифры)

Некорректные значения блокируют формирование итоговой строки.

Пример:

Ввод:

40/15/2025

Результат:

""

Отличие от getFormattedValue

Методы getFormattedValue и getISOFormatDate решают разные задачи.

getFormattedValue

Возвращает значение в текущем пользовательском формате:

31/12/2025

getISOFormatDate

Возвращает нормализованное значение:

2025-12-31

Таким образом:

  • первый ориентирован на UI;
  • второй ориентирован на хранение и обмен данными.

Использование в интеграциях

В системах обмена данными ISO-формат используется как стандарт.

Типовые сценарии:

  • отправка данных в REST API;
  • запись в базу данных;
  • сериализация в JSON;
  • синхронизация с backend на Node.js.

Пример интеграции:

const payload = {
    date: cleave.getISOFormatDate()
};

fetch('/api/save', {
    method: 'POST',
    body: JSON.stringify(payload)
});

Поведение при изменении значения

Метод всегда отражает текущее состояние экземпляра. При изменении input:

cleave.setRawValue('01/01/2026');
console.log(cleave.getISOFormatDate()); // 2026-01-01

Если значение обновляется программно, результат также пересчитывается динамически.

Ограничения метода

Существуют ограничения, обусловленные архитектурой форматирования:

  • невозможность обработки некорректных дат типа 31 февраля;
  • зависимость от корректной конфигурации datePattern;
  • отсутствие автоматической локализации при возврате ISO;
  • игнорирование временной зоны (метод работает только с датой).

Особенности поведения при разных локалях

Хотя отображение может быть локализовано, ISO-формат остаётся неизменным:

  • UI: 31.12.2025
  • ISO: 2025-12-31

Это обеспечивает независимость от региональных настроек.

Использование в цепочках обработки

Метод часто применяется в комбинации с другими функциями экземпляра Cleave.js:

const value = cleave.getISOFormatDate();

if (value) {
    validateDate(value);
    sendToServer(value);
}

Такой подход позволяет отделять форматирование от бизнес-логики.

Поведение при очистке поля

При очистке input:

cleave.setRawValue('');
cleave.getISOFormatDate(); // ""

Возвращается пустая строка, что сигнализирует об отсутствии валидного значения.

Совместимость с HTML input[type=“date”]

Метод может использоваться как промежуточный слой между кастомным форматированием и нативным HTML5-полем.

document.querySelector('input[type="date"]').value =
    cleave.getISOFormatDate();

Это позволяет унифицировать поведение различных форм ввода даты.

Итоговая характеристика поведения

Метод работает как детерминированный преобразователь состояния:

  • вход: форматированная дата;
  • обработка: разбор + нормализация;
  • выход: ISO-строка или пустое значение;
  • зависимость: конфигурация экземпляра и валидность данных.