Робота з датами в PHP — одна з тих речей, з якими ви або добре впораєтеся, або працюєте над розумінням, або ви застрягли в кролячій норі документації, яка міститься в посібнику.
Однак якщо ви працюєте з WordPress, ймовірність того, що вам знадобиться працювати з датами, досить висока. Майже все, що ми публікуємо, має принаймні одну дату.
Це включає дописи, сторінки, спеціальні типи дописів, редакції, чернетки тощо.
Крім того, існує ймовірність того, що спеціальна робота, яку вам потрібно розробити, потребуватиме пошуку різниці в двох датах за допомогою PHP. І хоча є кілька способів зробити це, є процес, якому я дотримуюся для чогось.
Різниця в датах за допомогою PHP
Перш ніж розглянути свій приклад, це допоможе дати трохи контексту. Зрештою, над чим би ви не працювали, швидше за все, дещо відрізнятиметься від того, що роблю я.
Загальна ідея може залишатися тією самою, тому суть того, що ви робите, усе ще можна екстраполювати з наведеного нижче коду. Але наведу конкретний приклад із власної роботи:
- У мене є спеціальний тип публікації, що представляє подію та подію як дату публікації.
- Мені потрібно знати, коли починається подія. Для цього я визначаю формат дати за допомогою формату n/j/Y, який підтримує PHP, а потім перетворюю його на дату за допомогою функції дати PHP .
- Далі я беру сьогоднішню дату (як простий спосіб визначити різницю в датах за допомогою PHP для цього прикладу) і перетворюю її на дату за допомогою тієї ж функції та формату n/j/Y.
- Після цього я створюю два об’єкти DateTime і обчислюю різницю.
Якщо це не так просто, я рекомендую натиснути посилання вище. В іншому випадку ось код.
<?php
/**
* Determines the number of years that exist between the specified
* event custom post type and today's date.
*
* @access private
* @param WP_Post $event A custom post type representing an event.
* @return string $years The difference in years.
*/
private function get_difference_in_dates( $event) {
// If the post_date is empty, why are we here?
if (empty( $event['post_date']) {
return;
}
// Get the date for the start of the event and te
$start = date( 'n/j/Y', strtotime( $event['post_date']) );
$today = date( 'n/j/Y' );
// Get the date for the start of the event and today's date.
$start = new DateTime( $start );
$end = new DateTime( $today );
// Now find the difference in years.
$difference = $start->diff( $end );
$years = $difference->y;
// If the difference is less than one, we'll return a string of "< 1".
$years = (1 > $years )? '< 1': (string)$years;
return $years;
}
Зауважте, що в коді вище мене цікавить лише отримання різниці в роках. Ви можете вибрати щось інше. Якщо це так, API, запропонований PHP, полегшує це, досліджуючи властивості об’єкта DateTime.
Але враховуючи дві дати, це простий спосіб знайти різницю в датах за допомогою PHP у контексті WordPress.
