/**
* Date Functions
*
* @package EDD
* @subpackage Functions
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
* @since 3.0
*/
/**
* Retrieves a localized, formatted date based on the WP timezone rather than UTC.
*
* @since 3.0
*
* @param int $timestamp Timestamp. Can either be based on UTC or WP settings.
* @param string $format Optional. Accepts shorthand 'date', 'time', or 'datetime'
* date formats, as well as any valid date_format() string.
* Default 'date' represents the value of the 'date_format' option.
* @return string The formatted date, translated if locale specifies it.
*/
function edd_date_i18n( $timestamp, $format = 'date' ) {
$format = edd_get_date_format( $format );
// If timestamp is a string, attempt to turn it into a timestamp.
if ( ! is_numeric( $timestamp ) ) {
$timestamp = strtotime( $timestamp );
}
// We need to get the timezone offset so we can pass that to date_i18n.
$date = EDD()->utils->date( 'now', edd_get_timezone_id(), false );
return date_i18n( $format, (int) $timestamp + $date->getOffset() );
}
/**
* Retrieve timezone ID
*
* @since 1.6
* @return string $timezone The timezone ID
*/
function edd_get_timezone_id() {
return EDD()->utils->get_time_zone( true );
}
/**
* Accept an EDD date object and get the UTC equivalent version of it.
* The EDD date object passed-in can be in any timezone. The one you'll get back will be the UTC equivalent of that time.
* This is useful when querying data from the tables by a user-defined date range, like "today".
*
* @since 3.0
* @param EDD\Utils\Date $edd_date_object The EDD Date object for which you wish to get the UTC equiavalent.
* @return EDD\Utils\Date The EDD date object set at the UTC equivalent time.
*/
function edd_get_utc_equivalent_date( $edd_date_object ) {
$instance_check = 'EDD\Utils\Date';
if ( ! $edd_date_object instanceof $instance_check ) {
return false;
}
// Convert the timezone (and thus, also the time) from the WP/EDD Timezone to the UTC equivalent.
$utc_timezone = new DateTimeZone( 'utc' );
$edd_date_object->setTimezone( $utc_timezone );
return $edd_date_object;
}
/**
* Accept an EDD date object set in UTC, and get the WP/EDD Timezone equivalent version of it.
* The EDD date object must be in UTC. The one you'll get back will be the WP timezone equivalent of that time.
* This is useful when showing date information to the user, so that they see it in the proper timezone, instead of UTC.
*
* @since 3.0
* @param EDD\Utils\Date $edd_date_object The EDD Date object for which you wish to get the UTC equiavalent.
* @return EDD\Utils\Date The EDD date object set at the UTC equivalent time.
*/
function edd_get_edd_timezone_equivalent_date_from_utc( $edd_date_object ) {
$instance_check = 'EDD\Utils\Date';
if ( ! $edd_date_object instanceof $instance_check ) {
return false;
}
// If you passed a date object to this function that isn't set to UTC, that is incorrect usage.
if ( 'UTC' !== $edd_date_object->format( 'T' ) ) {
return false;
}
// Convert the timezone (and thus, also the time) from UTC to the WP/EDD Timezone.
$edd_timezone = new DateTimeZone( edd_get_timezone_id() );
$edd_date_object->setTimezone( $edd_timezone );
return $edd_date_object;
}
/**
* Get the timezone abbreviation for the WordPress timezone setting.
*
* @since 3.0
*
* @return string The abreviation for the current WordPress timezone setting.
*/
function edd_get_timezone_abbr() {
$edd_timezone = edd_get_timezone_id();
$edd_date_object = EDD()->utils->date( 'now', $edd_timezone, true );
return $edd_date_object->format( 'T' );
}
/**
* Retrieves a date format string based on a given short-hand format.
*
* @since 3.0
*
* @see \EDD_Utilities::get_date_format_string()
*
* @param string $format Shorthand date format string. Accepts 'date', 'time', 'mysql', or
* 'datetime'. If none of the accepted values, the original value will
* simply be returned. Default 'date' represents the value of the
* 'date_format' option.
*
* @return string date_format()-compatible date format string.
*/
function edd_get_date_format( $format = 'date' ) {
return EDD()->utils->get_date_format_string( $format );
}
/**
* Get the format used by jQuery UI Datepickers.
*
* Use this if you need to use placeholder or format attributes in input fields.
*
* This is a bit different than `edd_get_date_format()` because these formats
* are exposed to users as hints and also used by jQuery UI so the Datepicker
* knows what format it returns into it's connected input value.
*
* Previous to this function existing, all values were hard-coded, causing some
* inconsistencies across admin-area screens.
*
* @see https://github.com/easydigitaldownloads/easy-digital-downloads/commit/e9855762892b6eec578b0a402f7950f22bd19632
*
* @since 3.0
*
* @param string $context The context we are getting the format for. Accepts 'display' or 'js'.
* Use 'js' for use with jQuery UI Datepicker. Use 'display' for HTML attributes.
* @return string
*/
function edd_get_date_picker_format( $context = 'display' ) {
// What is the context that we are getting the picker format for?
switch ( $context ) {
// jQuery UI Datepicker does its own thing
case 'js' :
case 'javascript' :
$retval = EDD()->utils->get_date_format_string( 'date-js' );
break;
// Used to display in an attribute, placeholder, etc...
case 'display' :
default :
$retval = EDD()->utils->get_date_format_string( 'date-attribute' );
break;
}
/**
* Filter the date picker format, allowing for custom overrides
*
* @since 3.0
*
* @param string $retval Date format for date picker
* @param string $context The context this format is for
*/
return apply_filters( 'edd_get_date_picker_format', $retval, $context );
}
/**
* Return an array of values used to populate an hour dropdown
*
* @since 3.0
*
* @return array
*/
function edd_get_hour_values() {
return (array) apply_filters( 'edd_get_hour_values', array(
'00' => '00',
'01' => '01',
'02' => '02',
'03' => '03',
'04' => '04',
'05' => '05',
'06' => '06',
'07' => '07',
'08' => '08',
'09' => '09',
'10' => '10',
'11' => '11',
'12' => '12',
'13' => '13',
'14' => '14',
'15' => '15',
'16' => '16',
'17' => '17',
'18' => '18',
'19' => '19',
'20' => '20',
'21' => '21',
'22' => '22',
'23' => '23',
'24' => '24'
) );
}
/**
* Return an array of values used to populate a minute dropdown
*
* @since 3.0
*
* @return array
*/
function edd_get_minute_values() {
return (array) apply_filters( 'edd_get_minute_values', array(
'00' => '00',
'01' => '01',
'02' => '02',
'03' => '03',
'04' => '04',
'05' => '05',
'06' => '06',
'07' => '07',
'08' => '08',
'09' => '09',
'10' => '10',
'11' => '11',
'12' => '12',
'13' => '13',
'14' => '14',
'15' => '15',
'16' => '16',
'17' => '17',
'18' => '18',
'19' => '19',
'20' => '20',
'21' => '21',
'22' => '22',
'23' => '23',
'24' => '24',
'25' => '25',
'26' => '26',
'27' => '27',
'28' => '28',
'29' => '29',
'30' => '30',
'31' => '31',
'32' => '32',
'33' => '33',
'34' => '34',
'35' => '35',
'36' => '36',
'37' => '37',
'38' => '38',
'39' => '39',
'40' => '40',
'41' => '41',
'42' => '42',
'43' => '43',
'44' => '44',
'45' => '45',
'46' => '46',
'47' => '47',
'48' => '48',
'49' => '49',
'50' => '50',
'51' => '51',
'52' => '52',
'53' => '53',
'54' => '54',
'55' => '55',
'56' => '56',
'57' => '57',
'58' => '58',
'59' => '59'
) );
}
Note: Businesses supporting HigherGround420 with subscriptions or memberships are not advertisers. HigherGround420 does not sell or promote cannabis products, but investigates and publishes honest information for consumers. HigherGround420 content may entertain, but is intended to educate. For Sustaining Businesses, we include:
Training and Education
Business Member discounts to HG420 Educational Events;
Exclusive Access to Consultation and Training via the HG420 Network;
Business Development or Horticultural Consulting
1 hour/mo CONSULTATION INCLUDED: meet privately with HG420 professionals to analyze any aspect of your operation and get real solutions.
Dedicated GROUP_ID eligible; May establish and access a private group for the purpose of sharing data (great for dispensaries, labs, marketers); (1)
Guaranteed Reviews (product development, doesn’t guarantee feature) each month; (2)
UP TO 25 VERIFICATIONS PER MONTH. This is useful for the producer seeking to certify crops and establish theirs as a major contributing member. Certified varieties feature your logo, because they are certified as yours (great marketing for years to come; see examples 1, 2, 3). (Too much? See the standard Business Membership)
Promotion
Your $625/mo allows us to REWARD lots of Contributors, try your products, and tell our readers about them; (2)
Your Logo and Branding displayed in reviews and in your HG420 Directory Listing (Businesses, Clubs, etc.);
Your Business listed in the Support section of all acknowledgements, including video credits;
Business Featured in Sustaining Member Card (5 sec, 1920 x 1080, HD) in videos produced with your support (1 per month);
Promotional Marketing in the HG420 store; (up to 5 items, add/change up to 1 per month);
You may send your promotional goods for us to “sell” in our store. We’re not a cannabis retailer, therefore we can legally distribute your merchandise as REWARDS;
Contributors shop the store and choose their REWARDS;
Social Media Promotion – Network with us and we’ll like and share whatever we can. Please do the same when we mention you.
Network with @HG420mag (several social media channels) and grow your social media audience.
Tours, features, video and other promotions are available.
(1) Entire GROUP may be given access; Form will not collect emails, though GROUP users may be required registration and login to submit reviews and especially to view data. Owner will not see any personal info.
(2) Additional underwriting required for HG420 to sample and review your products.
Hey, wait!Subscribe to stay current on new TerpTypes!
Before you go, let us offer you a FREE subscription.