2013-06-17 5 views
3

Рассказ: парень, который изначально написал этот код, был [и, вероятно, все еще] штаны на голове отсталые.Дата синтаксического анализа в формате% o ISO-8601 year

Код в вопросе получает платежные события от нашего провайдера и записывает их в базу данных в формате: 'o-m-d H:i:s'

Это все хорошо, за исключением модификатора %o даст вам другой год, если ISO- 8601 неделя «принадлежит» к другому году. [Reference]

Дело в том, что у нас были платежи в течение 2013-12-31 годов, которые в день с нормальной/не-сумасшедшей должны быть 2012-12-31. Таким образом, для всех целей и целей мы видим то, что, по-видимому, происходит в будущем, а иногда и в прошлом.

реальной проблема здесь состоит в том, что я не могу найти какую-либо функцию парсинга даты в PHP или MySQL, который будет интерпретировать %o флаг, тем самым предотвращая меня от повторного форматирования этих дат обратно в то вменяемое.

Кто-нибудь знает, как правильно интерпретировать эти даты?

+0

2012-12-31 - понедельник. Из-за правила (последний четверг), это 1-я неделя 2013 года. Таким образом, 'o-m-d' даст вам' 2013-12-31', который формально прав. Но вы смешивали форматировщики ISO 8601 с «стандартными» форматировщиками. Почему вы не используете 'c'as полный формат для ISO 8601 или просто' Y-m-d'ehich даст вам 2012-12-31? –

+0

@AxelAmthor, потому что парень, который изначально написал это, был полным дебилом. Я не знаю, что бы у кого-нибудь было когда-либо, но есть «o-m-d» форматы * везде *. Ужасно, он был уволен за некомпетентность. – Sammitch

+0

** Кто-нибудь знает, как правильно интерпретировать эти даты? ** - на самом деле они интерпретируются формально правильно. Вам нужно изменить свой код. –

ответ

0

Нет, ничего не знаю. Однако выполнение grep для всех ваших файлов для o-m-d, что является довольно уникальным термином, должно решить вам 98% ваших проблем через всю кодовую базу.

Если вы используете VCS (и, поскольку вы похожи на разумного человека, вероятно, есть), сделайте фиксацию, grep (или супер-поиск и замену) и посмотрите, будет ли это лучше для вас , если это так, совершите, если нет, отбросьте. Это действительно так просто.

Если это не сработает для вас ... Ну ... Пусть Бог помилует вашу душу.

+0

@ Сэммич: Я чувствую к тебе мужчину, я чувствую к тебе ... –