Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
113 lines
4.1 KiB
JavaScript
113 lines
4.1 KiB
JavaScript
// Код для ноды "форматируем даты" в 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
|
||
}
|
||
};
|
||
});
|
||
|
||
|
||
|
||
|
||
|