Sam_Durrant
@Sam_Durrant

Cравнить Дату События (ACF) и Дату сейчас — WP_Query?

Добрый день!
Подскажите пожалуйста, как можно сравнить Дату События (ACF) и Дату сейчас?
Сравниваться должны День и Месяц вместе.
В итоге должно получиться что-то наподобие «Этот день в истории».
К примеру: сегодня 3 ноября 2021, в этот день..
..и ниже вывод записей от (3 ноября) 2013 года, или (3 ноября) 2012 года

Дату «Сейчас» вывожу таким образом:
$today = current_time('md');

Дата события:
$acf_date = date_i18n('md', strtotime(get_field('event_date')));


Запрос:
$query = new WP_Query( $args );

Критерии запроса:
$args = array(
	'meta_query'    => array(
		array(
			'key'       => $acf_date,
			'value'     => $today,
			'compare'   => 'LIKE',
		),
	),
);


Ниже идёт цикл:
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>

<h2 class="history__title">
	<a href="<?php the_permalink(); ?>" class="title" rel="bookmark">
		<?php the_title(); ?>
	</a>
</h2>

<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else: ?> 
	<?php echo '<span>событий нет.</span>'; ?>
<?php endif; ?>


Дата События создана через ACF, где «отображаемая дата» — d/m/Y, а «Возвращаемая дата» — Ymd
Понятно, что нужно пересобрать критерии запроса..

При этом, возможно нужно как-то разделить дату отдельно день, и отдельно месяц, отдельно год.. Но логически кажется должно и так находить..

var_dump «даты события» и «даты сейчас» отдаёт данные «1103» «1103».

При этом, мне удавалось выводить из базы нужные данные, но я заметил что он может выводить неправильно их..
..к примеру выводил дату 20211030 (30 октября 2021), так как тут тоже содержится 1103.. то есть он не понимает что нужно брать только 4 последние цифры..

Буду благодарен Вашему ответу. Спасибо!
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Можете сравнивать даты как строки

$current_date = date( 'Y-m-d' );
$today = '2021-11-05';

if ( $current_date == $today ) {
	var_dump( 'сегодня 5 ноября' );
} else {
	var_dump( 'сегодня НЕ 5 ноября' );
}


Надежнее сравнивать через преобразование в метку времени Unix, для случаев, если даты в разных форматах

$current_date = date( 'Y-m-d' );
$today = '05-11-2021';

if ( strtotime( $current_date ) == strtotime( $today ) ) {
	var_dump( 'сегодня 5 ноября' );
} else {
	var_dump( 'сегодня НЕ 5 ноября' );
}


В документации ACF, при выборе постов даты сравниваются следующим образом:

// Find todays date in Ymd format.
$today = date('Ymd');

// Query posts using a meta_query
$args = array(
	'post_type' => 'event',
	'meta_query' => array(
		array(
			'key'     => 'event_date',
			'compare' => '=',
			'value'   => $today,
		)
	),
);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы