Marc Blase

Time conditional in PHP

Working on a WooCommerce project and there are products that are available daily until they sell out or until noon so they can be delivered. I use this function and pair it with the $product->is_in_stock() from the Woo WC_product class to provide conditional content in the template.

function wc_valid_time() {
    
    // Straight PHP using DateTime class	
    // date_default_timezone_set('America/Chicago');
    // $current_time = new DateTime(); 
    // $current_time->setTimezone(new DateTimeZone('America/Chicago'));

    // or, let WP do the lifting, as TimeZone is already set
    $current_time  = current_time("H:i");

    $start_time	   = "00:01"; // 12:01 am
    $cutoff_time   = "12:00"; // 12:00 pm
	
    $right_now 	= DateTime::createFromFormat('H:i', $current_time);
    $time2 		= DateTime::createFromFormat('H:i', $start_time);
    $time3 		= DateTime::createFromFormat('H:i', $cutoff_time);
	
	
	
	if ($right_now > $time2 && $right_now < $time3):
		return true;
	else :
		return false;
	endif;
	
}

EDIT 6/3/16:

It became necessary to filter for day of week as well as time of day, so below is how I did that:

function wc_valid_day() {
	
	// timezone is already set in WP control panel
	// date_default_timezone_set('America/Chicago');
	
	$current_day 	= current_time('D'); // day as three letter text
	// $current_time 	= new DateTime();
	// $current_time->setTimezone(new DateTimeZone('America/Chicago'));
	$saturday		= 'Sat';
	$sunday			= 'Sun';
	
	$what_day 		= DateTime::createFromFormat('D', $current_day);
	$date2 			= DateTime::createFromFormat('D', $saturday);
	$date3 			= DateTime::createFromFormat('D', $sunday);
	
	if ($what_day == $date2 || $what_day == $date3):
		return false;
	else :
		return true;
	endif;
}

Inside the loop on the template page for these products I use these two functions with the WooCommerce is_in_stock() function in a conditional to show the time/day appropriate markup.

Published on May 16, 2016