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();
|
|
}
|
|
}
|