Php робимо калькулятор дат і підрахунок днів по-сучасному

PHP: робимо калькулятор дат і підрахунок днів по-сучасному

У цьому старому скрипті я все вважав вручну. У сучасному PHP є зручні класи для роботи з датами і інтервалами дат.







Як перший приклад змоделюємо скрипт за посиланням вище, не забудемо і про визначення днів тижня.

Коли значення дат налаштовані, залишається обчислити інтервал між ними методом DateTime :: diff. При цьому ми обчислюємо інтервал абсолютним, тобто, дозволяємо кінцеву дату робити менше початкової.

Ось який шматочок коду вийшов:

Потім виведемо форму, використовуючи сучасну компоненту . з'явилася в HTML5.

На жаль, цю компоненту зі зручним вбудованим календариком і вбудованою перевіркою коректності даних до сих пір підтримують не всі браузери. На даний момент все спрацює в Chrome 20+, Opera 10.1+, Android 4.4+, а ось в Internet Explorer або Firefox нічого не вийде.

Дати передаються компоненті завжди в форматі РРРР-ММ-ДД.

Після форми основна частина скрипта використовує знайдений $ interval для форматування і друку даних. Про формати для DateTime :: format йдеться тут. вони ті ж самі. Службовий метод get_word_form допомагає правильно схиляти слова "днів", "років" і т.п.







Цьому скрипту потрібно PHP версії не нижче 5.3, але надійніше буде 5.3.13 і вище, пам'ятається, в 5.3.5 перебували баги з інтервалами, а в 5.3.13 і 5.4.X начебто, таких не виявлено. Кодування файлу передбачається Юнікод (UTF-8).

До речі, якби ми захотіли надрукувати вcе дати знайденого періоду "в стовпчик", це можна було б зробити так (перед закриває тегом?>):

Всі формати, які застосовуються для інтервалів дат, можна подивитися тут.

З точки зору програмування в коді також повчально, що об'єкти не можна "просто привласнювати" по типу $ dend = $ dstart. присвоїти за посиланням. Про клонування об'єктів див., Наприклад, тут.

Тепер напишемо калькулятор, що дозволяє додати до заданої дати позитивне чи негативне кількість днів, як в цьому старому скрипті. Скрипт може приймати методом $ _POST дату і кількість днів $ day. за замовчуванням ставиться поточна дата, а $ day = 0. Зверніть увагу, що для інтервалу $ interval потрібно в будь-якому випадку задати позитивний кількість днів, а "перевернути" розрахунок, вважаючи дати від більшої до меншої, дозволить властивість invert компоненти DateInterval.

Форма, крім компоненти . буде містити і спеціалізовану компоненту для введення числового значення . її підтримують також не всі браузери, хоча і побільше, ніж для дати. При цьому Android для типу number на момент написання замітки не підтримує атрибути step. min і max.

Частина скрипта після коду форми виявиться зовсім простий, ми лише відформатуємо і виведемо дані з дат $ dstart і $ dend.







Схожі статті