Converting between different date formats

These can be dropped into your functions.php to enable various shortcodes.

Sortable Date

This one takes a date string as its input and will display a date that is in the order Year Month Day, which can be used when you need to sort a column of dates numerically, for example.

[sortable_date]01/12/2016[/sortable_date]

Output: 20161201

/**
 * Converts date into numerically sortable format
 * e.g. 1 December 2017
 * => 20171201
 *
 * @param string $string containing a date string
 * @return string 
 */
 
function convert_date_to_sortable( $atts, $content = "" ) {
	$ukdate = strtotime(str_replace('/', '-', $content)); 
	$sortabledate = date('Ymd',$ukdate);
	return $sortabledate;
}
add_shortcode( 'sortable_date', 'convert_date_to_sortable' );

Convert Sortable Date to UK Date

This converts the date from Ymd to d/m/Y

[sortable_date_to_uk]20161201[/sortable_date_to_uk]

Output: 01/12/2016

<?php
/**
 * Converts Ymd date into uk slashed format
 * e.g. 20171201
 * => 01/12/2017
 *
 * @param string $string containing a date string
 * @return string 
 */
 
function convert_sortable_date_to_uk( $atts, $content = "" ) {
	$dashed = $content[6].$content[7].'-'.$content[4].$content[5].'-'.$content[0].$content[1].$content[2].$content[3];
	$newformat = date( 'd/m/Y', strtotime( $dashed ) );
	return $newformat;
}
add_shortcode( 'sortable_date_to_uk', 'convert_sortable_date_to_uk' );

Age in Years

This one takes a date string (e.g. a date of birth) as its input and will display the age in years as a number. For example:

[date_to_age]01/12/2016[/date_to_age]

Output: 2

<?php
/**
 * Converts date string into age in years
 * e.g. 1 December 2016 or 1 Dec 2016 or 01/12/2016 
 * => 2
 *
 * @param string $string containing a date string
 * @return string 
 */
 
function convert_date_string_to_age( $atts, $content = "" ) {
	$ukdate = strtotime(str_replace('/', '-', $content)); // omit if using U.S. d/m/Y
	$usdate = date('m/d/Y',$ukdate);
	$age = date_diff(date_create($usdate), date_create('now'))->y;
	return $age;
}
add_shortcode( 'date_to_age', 'convert_date_string_to_age' );

Leave a Reply