116 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Class for date management
 | 
						|
 *
 | 
						|
 * @package     EDD
 | 
						|
 * @subpackage  Classes/Date
 | 
						|
 * @copyright   Copyright (c) 2018, Easy Digital Downloads, LLC
 | 
						|
 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 | 
						|
 * @since       3.0
 | 
						|
 */
 | 
						|
namespace EDD\Utils;
 | 
						|
 | 
						|
if ( ! class_exists( '\\Carbon\\Carbon' ) ) {
 | 
						|
	require_once EDD_PLUGIN_DIR . 'includes/libraries/Carbon.php';
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Implements date formatting helpers for EDD.
 | 
						|
 *
 | 
						|
 * @since 3.0
 | 
						|
 *
 | 
						|
 * @see \Carbon\Carbon
 | 
						|
 * @see \DateTime
 | 
						|
 */
 | 
						|
final class Date extends \Carbon\Carbon {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Sets up the date.
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 * @throws \Exception
 | 
						|
	 */
 | 
						|
	public function __construct( $time = null, $timezone = null ) {
 | 
						|
		if ( null === $timezone ) {
 | 
						|
			$timezone = new \DateTimeZone( edd_get_timezone_id() );
 | 
						|
		}
 | 
						|
 | 
						|
		parent::__construct( $time, $timezone );
 | 
						|
 | 
						|
		// Apply the WP offset based on the WP timezone that was set.
 | 
						|
		$offset   = $this->getOffset();
 | 
						|
		$interval = \DateInterval::createFromDateString( "{$offset} seconds" );
 | 
						|
		$this->add( $interval );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Formats a given date string according to WP date and time formats and timezone.
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @param string|true $format Optional. How to format the date string.  Accepts 'date',
 | 
						|
	 *                            'time', 'datetime', 'mysql', 'timestamp', 'wp_timestamp',
 | 
						|
	 *                            'object', or any valid date_format() string. If true, 'datetime'
 | 
						|
	 *                            will be used. Default 'datetime'.
 | 
						|
	 * @return string|int|\DateTime Formatted date string, timestamp if `$type` is timestamp,
 | 
						|
	 *                              or a DateTime object if `$type` is 'object'.
 | 
						|
	 */
 | 
						|
	public function format( $format = 'datetime' ) {
 | 
						|
 | 
						|
		if ( empty( $format ) || true === $format ) {
 | 
						|
			$format = 'datetime';
 | 
						|
		}
 | 
						|
 | 
						|
		switch( $format ) {
 | 
						|
 | 
						|
			// jQuery UI Datepicker formats
 | 
						|
			case 'date-attribute':
 | 
						|
			case 'date-js':
 | 
						|
			case 'date-mysql':
 | 
						|
			case 'time-mysql':
 | 
						|
 | 
						|
			// WordPress Formats
 | 
						|
			case 'date':
 | 
						|
			case 'time':
 | 
						|
			case 'datetime':
 | 
						|
			case 'mysql':
 | 
						|
				$formatted = parent::format( edd_get_date_format( $format ) );
 | 
						|
				break;
 | 
						|
 | 
						|
			case 'object':
 | 
						|
				$formatted = $this;
 | 
						|
				break;
 | 
						|
 | 
						|
			case 'timestamp':
 | 
						|
				$formatted = $this->getTimestamp();
 | 
						|
				break;
 | 
						|
 | 
						|
			case 'wp_timestamp':
 | 
						|
				/*
 | 
						|
				 * Note: Even if the timezone has been changed, getTimestamp() will still
 | 
						|
				 * return the original timestamp because DateTime doesn't directly allow
 | 
						|
				 * conversion of the timestamp in terms of offset; it's immutable.
 | 
						|
				 */
 | 
						|
				$formatted = $this->getWPTimestamp();
 | 
						|
				break;
 | 
						|
 | 
						|
			default:
 | 
						|
				$formatted = parent::format( $format );
 | 
						|
				break;
 | 
						|
		}
 | 
						|
 | 
						|
		return $formatted;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Retrieves the date timestamp with the WordPress offset applied.
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @return int WordPress "local" timestamp.
 | 
						|
	 */
 | 
						|
	public function getWPTimestamp() {
 | 
						|
		return $this->getTimestamp() + EDD()->utils->get_gmt_offset();
 | 
						|
	}
 | 
						|
}
 |