= 0 ) ? time() : gmmktime(); $requestTime = isset( $_SERVER['REQUEST_TIME'] ) ? (int)$_SERVER['REQUEST_TIME'] : time(); $this->_current_time = array( $requestTime, $gmt_time, ); $this->_gmtdates = $registry->get( 'cache.memory' ); } /** * Get current time UNIX timestamp. * * Uses in-memory value, instead of re-calling `time()` / `gmmktime()`. * * @param bool $is_gmt Set to true to get GMT timestamp. * * @return int Current time UNIX timestamp */ public function current_time( $is_gmt = false ) { return $this->_current_time[(int)( (bool)$is_gmt )]; } /** * Returns the associative array of date patterns supported by the plugin. * * Currently the formats are: * array( * 'def' => 'd/m/yyyy', * 'us' => 'm/d/yyyy', * 'iso' => 'yyyy-m-d', * 'dot' => 'm.d.yyyy', * ); * * 'd' or 'dd' represent the day, 'm' or 'mm' represent the month, and 'yy' * or 'yyyy' represent the year. * * @return array List of supported date patterns. */ public function get_date_patterns() { return array( 'def' => 'd/m/yyyy', 'us' => 'm/d/yyyy', 'iso' => 'yyyy-m-d', 'dot' => 'm.d.yyyy', ); } /** * Get acceptable date format. * * Returns the date pattern (in the form 'd-m-yyyy', for example) associated * with the provided key, used by plugin settings. Simply a static map as * follows: * * @param string $key Key for the date format. * * @return string Associated date format pattern. */ public function get_date_pattern_by_key( $key = 'def' ) { $patterns = $this->get_date_patterns(); if ( ! isset( $patterns[$key] ) ) { return (string)current( $patterns ); } return $patterns[$key]; } /** * Format timestamp into URL safe, user selected representation. * * Returns a formatted date given a timestamp, based on the given date * format, with any '/' characters replaced with URL-friendly '-' * characters. * * @see Ai1ec_Date_System::get_date_patterns() for supported date formats. * * @param int $timestamp UNIX timestamp representing a date. * @param string $pattern Key of date pattern (@see * self::get_date_format_patter()) to * format date with * * @return string Formatted date string. */ public function format_date_for_url( $timestamp, $pattern = 'def' ) { $date = $this->format_date( $timestamp, $pattern ); $date = str_replace( '/', '-', $date ); return $date; } /** * Similar to {@see format_date_for_url} just using new DateTime interface. * * @param Ai1ec_Date_Time $datetime Instance of datetime to format. * @param string $pattern Target format to use. * * @return string Formatted datetime string. */ public function format_datetime_for_url( Ai1ec_Date_Time $datetime, $pattern = 'def' ) { $date = $datetime->format( $this->get_date_format_patter( $pattern ) ); return str_replace( '/', '-', $date ); } /** * Returns the date formatted with new pattern from a given date and old pattern. * * @see self::get_date_patterns() for supported date formats. * * @param string $date Formatted date string * @param string $old_pattern Key of old date pattern (@see * self::get_date_format_patter()) * @param string $new_pattern Key of new date pattern (@see * self::get_date_format_patter()) * @return string Formatted date string with new pattern */ public function convert_date_format( $date, $old_pattern, $new_pattern ) { // Convert old date to timestamp $timeArray = date_parse_from_format( $this->get_date_format_patter( $old_pattern ), $date ); $timestamp = mktime( $timeArray['hour'], $timeArray['minute'], $timeArray['second'], $timeArray['month'], $timeArray['day'], $timeArray['year'] ); // Convert to new date pattern return $this->format_date( $timestamp, $new_pattern ); } /** * Returns a formatted date given a timestamp, based on the given date format. * * @see self::get_date_patterns() for supported date formats. * * @param int $timestamp UNIX timestamp representing a date (in GMT) * @param string $pattern Key of date pattern (@see * self::get_date_format_patter()) to * format date with * @return string Formatted date string */ public function format_date( $timestamp, $pattern = 'def' ) { return gmdate( $this->get_date_format_patter( $pattern ), $timestamp ); } public function get_date_format_patter( $requested ) { $pattern = $this->get_date_pattern_by_key( $requested ); $pattern = str_replace( array( 'dd', 'd', 'mm', 'm', 'yyyy', 'yy' ), array( 'd', 'j', 'm', 'n', 'Y', 'y' ), $pattern ); return $pattern; } /** * Returns human-readable version of the GMT offset. * * @param string $timezone_name Olsen Timezone name [optional=null] * * @return string GMT offset expression */ public function get_gmt_offset_expr( $timezone_name = null ) { $timezone = $this->get_gmt_offset( $timezone_name ); $offset_h = (int)( $timezone / 60 ); $offset_m = absint( $timezone - $offset_h * 60 ); $timezone = sprintf( Ai1ec_I18n::__( 'GMT%+d:%02d' ), $offset_h, $offset_m ); return $timezone; } /** * Get current GMT offset in seconds. * * @param string $timezone_name Olsen Timezone name [optional=null] * * @return int Offset from GMT in seconds. */ public function get_gmt_offset( $timezone_name = null ) { if ( null === $timezone_name ) { $timezone_name = 'sys.default'; } $current = $this->_registry->get( 'date.time', 'now', $timezone_name ); return $current->get_gmt_offset(); } /** * gmgetdate method * * Get date/time information in GMT * * @param int $timestamp Timestamp at which information shall be evaluated * * @return array Associative array of information related to the timestamp */ public function gmgetdate( $timestamp = NULL ) { if ( NULL === $timestamp ) { $timestamp = isset( $_SERVER['REQUEST_TIME'] ) ? (int)$_SERVER['REQUEST_TIME'] : time(); } if ( NULL === ( $date = $this->_gmtdates->get( $timestamp ) ) ) { $particles = explode( ',', gmdate( 's,i,G,j,w,n,Y,z,l,F,U', $timestamp ) ); $date = array_combine( array( 'seconds', 'minutes', 'hours', 'mday', 'wday', 'mon', 'year', 'yday', 'weekday', 'month', 0 ), $particles ); $this->_gmtdates->set( $timestamp, $date ); } return $date; } /** * Returns current rounded time as unix integer. * * @param int $shift Shift value. * * @return int Unix timestamp. */ public function get_current_rounded_time( $shift = 11 ) { return $this->current_time() >> $shift << $shift; } }