Files
crm.clientright.ru/n8n_format_dates_code.js

113 lines
4.1 KiB
JavaScript
Raw Normal View History

// Код для ноды "форматируем даты" в n8n
// Входные данные: { last_event: {...}, project_id: "...", ... }
const items = $input.all();
return items.map(item => {
// Получаем данные из last_event
const lastEvent = item.json.last_event || {};
// Форматируем дату из DD.MM.YYYY в YYYY-MM-DD
function formatDate(dateStr) {
if (!dateStr) return '';
const match = dateStr.match(/^(\d{2})\.(\d{2})\.(\d{4})$/);
if (match) {
return `${match[3]}-${match[2]}-${match[1]}`;
}
// Если уже в формате YYYY-MM-DD
if (dateStr.match(/^\d{4}-\d{2}-\d{2}$/)) {
return dateStr;
}
return dateStr;
}
// Форматируем время из HH:MM в HH:MM:SS
function formatTime(timeStr) {
if (!timeStr) return '10:00:00';
const match = timeStr.match(/^(\d{1,2}):(\d{2})$/);
if (match) {
return `${match[1].padStart(2, '0')}:${match[2]}:00`;
}
return timeStr;
}
// Извлекаем данные из last_event
const eventDate = lastEvent.event_date || lastEvent.Дата || '';
const eventTime = lastEvent.event_time || lastEvent.Время || '';
const eventName = lastEvent.event_name || lastEvent.Наименование || 'Судебное заседание';
const location = lastEvent.location || lastEvent.Место || '';
const eventResult = lastEvent.event_result || lastEvent.Результат || '';
const eventBasis = lastEvent.event_basis || lastEvent.Основание || '';
const note = lastEvent.note || lastEvent.Примечание || '';
const publicationDate = lastEvent.publication_date || lastEvent['Дата размещения'] || '';
const formattedDate = formatDate(eventDate);
const formattedTime = formatTime(eventTime);
// Формируем дату-время в формате, который понимает JavaScript (YYYY-MM-DD HH:MM:SS)
const formattedDateTime = formattedDate && formattedTime
? `${formattedDate} ${formattedTime}`
: null;
// Вычисляем время окончания (+1 час)
let endTime = '11:00:00';
let endDateTime = null;
if (formattedDateTime) {
try {
// Создаём Date объект из отформатированной строки
const startDate = new Date(formattedDateTime);
// Проверяем, что дата валидна
if (!isNaN(startDate.getTime())) {
const endDate = new Date(startDate.getTime() + 3600000); // +1 час
endTime = endDate.toTimeString().substring(0, 8); // HH:MM:SS
endDateTime = endDate.toISOString().slice(0, 19).replace('T', ' ');
} else {
// Если дата невалидна, используем значения по умолчанию
endTime = '11:00:00';
if (formattedDate) {
endDateTime = `${formattedDate} 11:00:00`;
}
}
} catch (e) {
// В случае ошибки используем значения по умолчанию
endTime = '11:00:00';
if (formattedDate) {
endDateTime = `${formattedDate} 11:00:00`;
}
}
}
return {
json: {
// Данные из корня
project_id: item.json.project_id,
case_number: item.json.case_number,
uid: item.json.uid,
// Данные события (распакованные из last_event)
event_name: eventName,
event_date: eventDate, // Оригинальная дата (DD.MM.YYYY)
event_time: eventTime, // Оригинальное время (HH:MM)
location: location,
event_result: eventResult,
event_basis: eventBasis,
note: note,
publication_date: publicationDate,
// Отформатированные значения
formatted_date: formattedDate, // YYYY-MM-DD
formatted_time: formattedTime, // HH:MM:SS
formatted_datetime: formattedDateTime, // YYYY-MM-DD HH:MM:SS
end_time: endTime, // HH:MM:SS
end_datetime: endDateTime // YYYY-MM-DD HH:MM:SS
}
};
});