Рассказ: парень, который изначально написал этот код, был [и, вероятно, все еще] штаны на голове отсталые.Дата синтаксического анализа в формате% o ISO-8601 year
Код в вопросе получает платежные события от нашего провайдера и записывает их в базу данных в формате: 'o-m-d H:i:s'
Это все хорошо, за исключением модификатора %o
даст вам другой год, если ISO- 8601 неделя «принадлежит» к другому году. [Reference]
Дело в том, что у нас были платежи в течение 2013-12-31 годов, которые в день с нормальной/не-сумасшедшей должны быть 2012-12-31. Таким образом, для всех целей и целей мы видим то, что, по-видимому, происходит в будущем, а иногда и в прошлом.
реальной проблема здесь состоит в том, что я не могу найти какую-либо функцию парсинга даты в PHP или MySQL, который будет интерпретировать %o
флаг, тем самым предотвращая меня от повторного форматирования этих дат обратно в то вменяемое.
Кто-нибудь знает, как правильно интерпретировать эти даты?
2012-12-31 - понедельник. Из-за правила (последний четверг), это 1-я неделя 2013 года. Таким образом, 'o-m-d' даст вам' 2013-12-31', который формально прав. Но вы смешивали форматировщики ISO 8601 с «стандартными» форматировщиками. Почему вы не используете 'c'as полный формат для ISO 8601 или просто' Y-m-d'ehich даст вам 2012-12-31? –
@AxelAmthor, потому что парень, который изначально написал это, был полным дебилом. Я не знаю, что бы у кого-нибудь было когда-либо, но есть «o-m-d» форматы * везде *. Ужасно, он был уволен за некомпетентность. – Sammitch
** Кто-нибудь знает, как правильно интерпретировать эти даты? ** - на самом деле они интерпретируются формально правильно. Вам нужно изменить свой код. –