Last active
November 18, 2023 05:07
-
-
Save brianjhanson/17e33b1d008fd69e3ea5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function the_date_range($args) { | |
global $post; | |
$default = array( | |
'start_field' => 'start_date', | |
'end_field' => null, | |
'base_format' => 'Ymd', | |
'post_id' => $post->ID, | |
'separator' => '<span class="date-separator">–</span>', | |
'month_format' => 'F', | |
'day_format' => 'j', | |
'year_format' => 'Y' | |
); | |
$s = array_intersect_key($args + $default, $default); | |
$start = get_field($s['start_field'], $s['post_id']); | |
$end = get_field($s['end_field'], $s['post_id']); | |
// Checks to make sure the start is a valid field | |
if($start) { | |
$raw_dates['start'] = DateTime::createFromFormat( $s['base_format'], $start ); | |
} else { | |
return; | |
} | |
// Adds end field if there is one | |
if( $end ) { | |
$raw_dates['end'] = DateTime::createFromFormat( $s['base_format'], $end ); | |
} | |
// Sets up the $dates array | |
foreach($raw_dates as $key => $value) { | |
$dates[$key] = array( | |
'month' =>$value->format($s['month_format']), | |
'day' => $value->format($s['day_format']), | |
'year' => $value->format($s['year_format']) | |
); | |
} | |
// if the years aren't the same the whole output has to change so we check that | |
// at the beginning | |
if($dates['start']['year'] == $dates['end']['year']) { | |
// if years are the same and months are the same | |
if($dates['start']['month'] == $dates['end']['month']) { | |
// if years, months and days are the same (same date in both fields) | |
if($dates['start']['day'] == $dates['end']['day']) { | |
$range = $dates['start']['month']." ".$dates['start']['day'].", ".$dates['start']['year']; | |
// if years and months are the same but not days | |
} else { | |
$range = $dates['start']['month']." ".$dates['start']['day'].$s['separator'].$dates['end']['day'].", ".$dates['start']['year']; | |
} | |
// if years are the same but months are not the same | |
} else { | |
$range = $dates['start']['month']." ".$dates['start']['day'].$s['separator'].$dates['end']['month']." ".$dates['end']['day'].", ".$dates['start']['year']; | |
} | |
} else { | |
$range = $dates['start']['month']." ".$dates['start']['day'].", ".$dates['start']['year'].$s['separator'].$dates['end']['month']." ".$dates['end']['day'].", ".$dates['end']['year']; | |
} | |
echo $range; | |
} |
Thanks for the quick reply Brian! I will test out what you mentioned and see if I can get that to work. It's interesting that ACF still doesn't seem to have this feature natively. Cheers!
@brianjhanson hi again! I correctly called the function and was able to get it to display my date range. Thanks again for replying!
@atazminhlk 's answer was also key to my solution - setting the field names and base format correctly. The ACF field return format should match the base_format
in the $args
array.
@keishabien 🎉 glad you got it working!
Great work, thanks so much for doing this.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@keishabien it won't output anything by default, you'd need to call
the_date_range($args)
in your template, where$args
is an array of values like this.That being said, as others reported this snippet probably doesn't work anymore. Sorry everyone, I somehow missed that people were trying to use it and haven't kept it updated at all.