Я не могу установить год ниже 1899 для поста. Если я установлю год ниже 1899, он будет установлен на текущий год автоматически.
Я купил тему Timeline и спросил на их форуме поддержки. Они ответили:
Это звучит как ограничение, созданное вашим хостинг-провайдером. Ничто в теме не препятствует назначенной вами дате - как вы можете видеть, в демоверсии есть записи с датами 1400-х годов. Попробуйте связаться с вашим хостинг-провайдером и посмотреть, есть ли у них понимание того, как решить эту проблему.
date
date-time
post-editor
Спартанцы
источник
источник
WP_DEBUG
и отредактируйте сообщение об ошибке в свой вопрос. Я мог бы заставить это казаться таким, но ссылка на рабочую версию рассматриваемой темы на самом деле тоже не сильно помогает.Ответы:
На самом деле это не ответ, а попытка найти конкретный контекст для этой проблемы. Пожалуйста, установите следующий плагин на свой сайт, попробуйте установить три даты и добавить свой результат ко второму
<pre>
в таблице ниже.Суть плагина можно проверить здесь .
0999
, нажмите « Обновить» . Сохранено или изменено на текущую дату?1899
,2020
и2039
.источник
Вопрос и ожидания
Хотя буквальная форма этого вопроса практична в контексте (1899 год), в теоретическом смысле она немного расплывчата. Сколько лет старому? Как далеко в прошлое , мы могли бы хотеть пойти? Как насчет будущего?
Так как WordPress начинал как движок блогов, в этом контексте он развивался, чтобы обрабатывать следующие промежутки времени:
Поскольку использование WordPress превратилось в приложения для ведения блогов, такие проекты (как правило, история и искусство, как я видел из отчетов) начали сталкиваться с различными проблемами с датами за пределами этого диапазона.
Для целей моего исследования я сформулировал следующие вопросы:
Ограничения платформы
Поскольку WordPress является PHP-приложением и использует MySQL для хранения данных, на него распространяются их ограничения.
MySQL
WordPress хранит даты публикации в
post_date
столбцеDATETIME
типа в MySQL.Согласно документации этот тип поддерживает годы от 1000 до 9999 :
Однако это также говорит о том, что более ранние значения могут работать, не говоря уже о более поздних значениях:
Хотя эмпирически я наблюдал значения вне рабочего диапазона, это анекдотично и не соответствует нашему уровню надежности.
PHP
В программировании PHP Unix timestamp представление даты широко используется. В соответствии с документацией для наших целей (PHP 5.2+ и общая 32-битная среда) он поддерживает годы (полностью) с 1902 по 2037 год :
Кроме того, более новая
Date/Time
обработка на основе 64-битной системы имеет диапазон от -292 до 292 млрд. Лет , что, вероятно, превышает потребности человечества в настоящее время.Ограничения WordPress
WordPress вводит и наследует некоторые дополнительные ограничения в своей базе кода.
Поток данных
С точки зрения основного рабочего процесса пользователя, есть две обработки, связанные с датой:
Обратите внимание, что это технически совершенно разные и независимые процессы. Как поясняется далее, их диапазоны не перекрываются, и сохранение правильной даты не означает способность правильно читать ее в среде WordPress.
Явные ограничения
_wp_translate_postdata()
год обработки (представлен в виде отличного номера от формы) и:wp_checkdate()
, который вызывает PHP роднойcheckdate()
, что накладывает ограничение от 1 до 32767Неявные ограничения
strtotime()
Функция PHP используется несколько раз и подчиняется вышеупомянутой метке времени Unix, на самом низком уровне,mysql2date()
которая влияет на все чтения дат из базы данных, наследуемый диапазон с 1902 по 2037 годget_gmt_from_date()
, которое ожидает год([0-9]{1,4})
, ограничив его значением от 1 до 9999 , что дает высокую вероятность аналогичной обработки в других функциях, которые потребуют более тщательного аудита кода для перечисленияВозможность обхода
wp_checkdate()
имеетwp_checkdate
фильтр, который позволяет переопределить эту проверку проверкиdate_i18n()
которое имеетdate_i18n
фильтр, теоретически позволяет полностью перехватывают и повторно процесс вывода дат интерфейса Однако , если вызов функция передается уже вне диапазона (false
) ввода временных метокВыводы
Для практических целей и переносимости данных диапазон дат публикации WordPress, по-видимому, равен диапазону 32-битной метки времени Unix и состоит из 1902–2037 годов включительно .
Для любой операции после даты, выходящей за пределы этого диапазона, необходимо провести аудит (64-битный диапазон меток времени Unix, де-факто работающий MySQL или альтернативное хранилище базы данных для значений). Для более дальних диапазонов ( ниже 1000, выше 9999 ), вероятно, потребуется значительное количество пользовательского кода.
Для любой реализации произвольных дат имеет смысл:
Date/Time
кода и / или функций WordPress, которые не подвержены влиянию ограничений на временные метки UnixКод испытательный стенд
Следующий код и подобранный набор лет использовались для исследования выше и проверки выводов:
источник
r()
?