From 1172edf31e63fa3390d7e00edb060a8b320dbfdb Mon Sep 17 00:00:00 2001 From: Fovway Date: Wed, 22 Oct 2025 23:47:05 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=8B=20=D1=81=20=D0=B4=D0=B0=D1=82=D0=B0=D0=BC=D0=B8=20=D0=B2?= =?UTF-8?q?=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=20?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Реализованы вспомогательные функции для преобразования временных меток SQLite в локальное время. - Обновлено форматирование дат создания и изменения заметок с учетом локали устройства. - Оптимизирован код для отображения дат в формате "дд.мм.гггг чч:мм" и "дд.мм.гггг" в зависимости от контекста. --- public/app.js | 62 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/public/app.js b/public/app.js index 82242dc..9253f34 100644 --- a/public/app.js +++ b/public/app.js @@ -95,6 +95,29 @@ function getFormattedDateTime() { }; } +// Вспомогательные функции для корректной работы с временем (UTC -> локаль) +function parseSQLiteUtc(ts) { + return new Date(ts.replace(" ", "T") + "Z"); +} + +function formatLocalDateTime(date) { + return new Intl.DateTimeFormat("ru-RU", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + }).format(date); +} + +function formatLocalDateOnly(date) { + return new Intl.DateTimeFormat("ru-RU", { + day: "2-digit", + month: "2-digit", + year: "numeric", + }).format(date); +} + // Функция для авторасширения текстового поля function autoExpandTextarea(textarea) { textarea.style.height = "auto"; @@ -1200,24 +1223,21 @@ async function renderNotes(notes) { imagesHtml += ""; } - // Форматируем дату создания и дату изменения (в одну строку) - let dateDisplay = `${note.date} ${note.time}`; - if (note.updated_at && note.created_at !== note.updated_at) { - const createdDate = new Date(note.created_at); - const updatedDate = new Date(note.updated_at); - - const formatDate = (date) => { - const day = String(date.getDate()).padStart(2, "0"); - const month = String(date.getMonth() + 1).padStart(2, "0"); - const year = date.getFullYear(); - const hours = String(date.getHours()).padStart(2, "0"); - const minutes = String(date.getMinutes()).padStart(2, "0"); - return `${day}.${month}.${year} ${hours}:${minutes}`; - }; - - dateDisplay = `Создано: ${formatDate( - createdDate - )} • Изменено: ${formatDate(updatedDate)}`; + // Форматируем дату создания и изменения по локали устройства + let dateDisplay; + if (note.created_at) { + const created = parseSQLiteUtc(note.created_at); + if (note.updated_at && note.created_at !== note.updated_at) { + const updated = parseSQLiteUtc(note.updated_at); + dateDisplay = `Создано: ${formatLocalDateTime( + created + )} • Изменено: ${formatLocalDateTime(updated)}`; + } else { + dateDisplay = formatLocalDateTime(created); + } + } else { + // Фолбэк для старых записей + dateDisplay = `${note.date} ${note.time}`; } const noteHtml = ` @@ -2335,11 +2355,7 @@ let currentDate = new Date(); // Функция для преобразования timestamp в формат dd.mm.yyyy function formatDateFromTimestamp(timestamp) { - const date = new Date(timestamp); - const day = String(date.getDate()).padStart(2, "0"); - const month = String(date.getMonth() + 1).padStart(2, "0"); - const year = date.getFullYear(); - return `${day}.${month}.${year}`; + return formatLocalDateOnly(parseSQLiteUtc(timestamp)); } // Функция для отображения календаря