Преобразование Дат в Excel и Google Sheets для Импорта в Cotonti
Эта документация фокусируется на практических инструкциях по преобразованию дат в формат UNIX timestamp (целое число секунд с 01.01.1970 00:00:00 UTC) для Cotonti. Мы минимизируем текст, акцентируя на примерах. Cotonti хранит даты как int (timestamp), так что преобразуйте строки дат в числа для корректного импорта в БД (например, в таблицы вроде cot_pages). После импорта даты будут правильно храниться (как числа) и отображаться (через cot_date с учетом пояса и локали).
Используйте эти шаги в Excel или Google Sheets перед экспортом в CSV для импорта. Предполагаем, что исходные даты в столбце A. Результат — в столбце B как число. Учитывайте, что Excel/Google Sheets используют UTC по умолчанию; часовые пояса обрабатываются в Cotonti позже.
Инструкции для Excel
- Откройте файл, вставьте даты в столбец A.
- В столбце B примените формулу для преобразования.
- Базовая формула для даты (без времени): =(ДАТАЗНАЧ(A1) - ДАТА(1970;1;1)) * 86400
- Для даты с временем: =(A1 - ДАТА(1970;1;1)) * 86400, если A1 распознан как дата/время.
- Для нестандартных строк: Используйте ТЕКСТ, ЗАМЕНИТЬ или ДАТА для парсинга.
- Для '0000-00-00': =ЕСЛИ(A1="0000-00-00";0;(ДАТАЗНАЧ(A1)-ДАТА(1970;1;1))*86400)
- Скопируйте формулу вниз, затем скопируйте значения (Правой кнопкой > Специальная вставка > Значения) для чисел.
- Экспортируйте в CSV с разделителем ";" или ",".
Инструкции для Google Sheets
- Откройте таблицу, даты в A.
- В B: Формулы аналогичны Excel, но с ";" вместо "," в аргументах.
- Базовая: =(DATEVALUE(A1) - DATE(1970;1;1)) * 86400
- С временем: =(A1 - DATE(1970;1;1)) * 86400
- Для '0000-00-00': =IF(A1="0000-00-00";0;(DATEVALUE(A1)-DATE(1970;1;1))*86400)
- Скопируйте, вставьте как значения (Правка > Специальная вставка > Только значения).
- Экспорт: Файл > Скачать > CSV.
Теперь — множество примеров. Каждый включает исходную дату (A1), формулу, результат (timestamp) и как это отобразится в Cotonti (пример вывода через cot_date("d.m.Y H:i") с поясом +0 UTC). Импортируйте результат в поля вроде page_begin.
Примеры для Excel и Google Sheets (формулы идентичны)
Пример 1: Стандартная дата MySQL (Y-m-d).
A1: "2023-12-31"
Формула: =(ДАТАЗНАЧ(A1) - ДАТА(1970;1;1)) * 86400
Результат: 1703980800
Хранение в БД: 1703980800 (int)
Вывод в Cotonti: "31.12.2023 00:00"
Пример 2: Дата с временем (Y-m-d H:i:s).
A1: "2023-12-31 23:59:59" (введите как текст или дату)
Формула: =(ДАТАЗНАЧ(ЛЕВ(A1;10)) + ВРЕМЯЗНАЧ(ПРАВ(A1;8)) - ДАТА(1970;1;1)) * 86400
Результат: 1704067199
Хранение: 1704067199
Вывод: "31.12.2023 23:59"
Пример 3: Нестандартная дата (d.m.Y).
A1: "31.12.2023"
Формула: =(ДАТА(ПРАВ(A1;4);СЖПРОБЕЛЫ(СРЕД(A1;4;2));ЛЕВ(A1;2)) - ДАТА(1970;1;1)) * 86400
Результат: 1703980800
Хранение: 1703980800
Вывод: "31.12.2023 00:00"
Пример 4: Английская дата (Month d, Y).
A1: "December 31, 2023"
Формула: =(ДАТАЗНАЧ(A1) - ДАТА(1970;1;1)) * 86400 (Excel распознает автоматически)
Результат: 1703980800
Хранение: 1703980800
Вывод: "31.12.2023 00:00"
Пример 5: Русская дата (d месяца Y).
A1: "31 декабря 2023"
Формула: Сначала замените месяц: =ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;"декабря";"December");" ";" "), затем примените ДАТАЗНАЧ к результату и базовую формулу.
Полная: =(ДАТАЗНАЧ(ПОДСТАВИТЬ(A1;"декабря";"12")) - ДАТА(1970;1;1)) * 86400 (для декабря; создайте SWITCH для месяцев).
Результат: 1703980800
Хранение: 1703980800
Вывод: "31 декабря 2023 00:00" (с локализацией)
Пример 6: Нулевая дата.
A1: "0000-00-00"
Формула: =ЕСЛИ(A1="0000-00-00";0; (ДАТАЗНАЧ(A1)-ДАТА(1970;1;1))*86400)
Результат: 0
Хранение: 0
Вывод: "01.01.1970 00:00" или "Не указано" (в шаблоне if >0)
Пример 7: Нулевая с временем.
A1: "0000-00-00 00:00:00"
Формула: =ЕСЛИ(ЛЕВ(A1;10)="0000-00-00";0; (ДАТАЗНАЧ(ЛЕВ(A1;10)) + ВРЕМЯЗНАЧ(СРЕД(A1;12;8)) - ДАТА(1970;1;1)) * 86400)
Результат: 0
Хранение: 0
Вывод: "01.01.1970 00:00"
Пример 8: Дата до 1970 (историческая).
A1: "1969-12-31"
Формула: =(ДАТАЗНАЧ(A1) - ДАТА(1970;1;1)) * 86400 (даст отрицательное)
Результат: -86400
Хранение: В Cotonti UNSIGNED int — установите 0 или используйте отдельное поле (Cotonti не поддерживает отрицательные timestamps напрямую).
Вывод: Если 0 — "01.01.1970 00:00"
Пример 9: Дата с временем в формате d/m/Y H:i.
A1: "31/12/2023 15:30"
Формула: =(ДАТА(ПРАВ(A1;4);СРЕД(A1;4;2);ЛЕВ(A1;2)) + ВРЕМЯЗНАЧ(ПРАВ(A1;5)) - ДАТА(1970;1;1)) * 86400
Результат: 1704036600
Хранение: 1704036600
Вывод: "31.12.2023 15:30"
Пример 10: Пустая дата.
A1: "" (пусто)
Формула: =ЕСЛИ(ПУСТО(A1);0; (ДАТАЗНАЧ(A1)-ДАТА(1970;1;1))*86400)
Результат: 0
Хранение: 0
Вывод: "Не указано"
Пример 11: Дата в ISO (Y-m-d\TH:i:s).
A1: "2023-12-31T23:59:59"
Формула: =(ДАТАЗНАЧ(ЛЕВ(A1;10)) + ВРЕМЯЗНАЧ(СРЕД(A1;12;8)) - ДАТА(1970;1;1)) * 86400
Результат: 1704067199
Хранение: 1704067199
Вывод: "31.12.2023 23:59"
Пример 12: Нестандартная с днем недели.
A1: "Sun, 31 Dec 2023"
Формула: =(ДАТАЗНАЧ(ПРАВ(A1;11)) - ДАТА(1970;1;1)) * 86400 (игнорируя день недели)
Результат: 1703980800
Хранение: 1703980800
Вывод: "31.12.2023 00:00"
Пример 13: Массовое для '0000-00-00 00:00'.
A1: "0000-00-00 00:00"
Формула: =ЕСЛИ(ЛЕВ(A1;10)="0000-00-00";0; (ДАТАЗНАЧ(ЛЕВ(A1;10))-ДАТА(1970;1;1))*86400)
Результат: 0
Хранение: 0
Вывод: "01.01.1970 00:00"
Пример 14: Будущая дата.
A1: "2026-02-28"
Формула: =(ДАТАЗНАЧ(A1) - ДАТА(1970;1;1)) * 86400
Результат: 1709208000
Хранение: 1709208000
Вывод: "28.02.2026 00:00"
Пример 15: Дата с миллисекундами (игнорируем ms).
A1: "2023-12-31 23:59:59.999"
Формула: =(ДАТАЗНАЧ(ЛЕВ(A1;10)) + ВРЕМЯЗНАЧ(СРЕД(A1;12;8)) - ДАТА(1970;1;1)) * 86400
Результат: 1704067199
Хранение: 1704067199
Вывод: "31.12.2023 23:59"
Пример 16: Русская полная дата.
A1: "31 декабря 2023 г. 15:30:00"
Формула: Сначала mappa месяцев (декабря=12), затем: =(ДАТА(2023;12;31) + ВРЕМЯ(15;30;0) - ДАТА(1970;1;1)) * 86400 (адаптируйте).
Результат: 1704036600
Хранение: 1704036600
Вывод: "31.12.2023 15:30"
Пример 17: Ошибочная дата (исправление).
A1: "32.12.2023" (недействительная)
Формула: =ЕСЛИОШИБКА((ДАТА(ПРАВ(A1;4);СРЕД(A1;4;2);ЛЕВ(A1;2))-ДАТА(1970;1;1))*86400;0)
Результат: 0 (из-за ошибки)
Хранение: 0
Вывод: "Не указано"
Пример 18: Текущая дата (авто).
A1: =СЕГОДНЯ() (получит 28.02.2026)
Формула: =(A1 - ДАТА(1970;1;1)) * 86400
Результат: 1709208000 (для 28.02.2026 00:00)
Хранение: 1709208000
Вывод: "28.02.2026 00:00"
Пример 19: Дата из текста с разделителями.
A1: "2023/12/31"
Формула: =(ДАТА(ЛЕВ(A1;4);СРЕД(A1;6;2);ПРАВ(A1;2)) - ДАТА(1970;1;1)) * 86400
Результат: 1703980800
Хранение: 1703980800
Вывод: "31.12.2023 00:00"
Пример 20: Нулевая вариация.
A1: "0000-00-00 00:00:00"
Формула: =ЕСЛИ(И(ЛЕВ(A1;4)="0000";СРЕД(A1;6;2)="00";СРЕД(A1;9;2)="00");0;(ДАТАЗНАЧ(ЛЕВ(A1;10))+ВРЕМЯЗНАЧ(СРЕД(A1;12;8))-ДАТА(1970;1;1))*86400)
Результат: 0
Хранение: 0
Вывод: "01.01.1970 00:00"
Эти примеры покрывают большинство случаев. Тестируйте формулы на ваших данных, корректируйте для специфических форматов. После импорта в Cotonti проверьте в БД (SELECT page_begin FROM cot_pages) и на страницах (должны отображаться правильно с учетом пояса). Если ошибки — вернитесь к 0 для проблемных дат.