wordpress/php-fpm/wordpress_files/plugins/jetpack/sal/class.json-api-date.php

89 lines
2.2 KiB
PHP
Raw Permalink Normal View History

2020-05-22 03:40:23 +02:00
<?php
class WPCOM_JSON_API_Date {
/**
* Returns ISO 8601 formatted datetime: 2011-12-08T01:15:36-08:00
*
* @param $date_gmt (string) GMT datetime string.
* @param $date (string) Optional. Used to calculate the offset from GMT.
*
* @return string
*/
static function format_date( $date_gmt, $date = null ) {
$timestamp_gmt = strtotime( "$date_gmt+0000" );
if ( null === $date ) {
$timestamp = $timestamp_gmt;
$hours = $minutes = $west = 0;
} else {
$date_time = date_create( "$date+0000" );
if ( $date_time ) {
$timestamp = date_format( $date_time, 'U' );
} else {
$timestamp = 0;
}
// "0000-00-00 00:00:00" == -62169984000
if ( - 62169984000 == $timestamp_gmt ) {
// WordPress sets post_date=now, post_date_gmt="0000-00-00 00:00:00" for all drafts
// WordPress sets post_modified=now, post_modified_gmt="0000-00-00 00:00:00" for new drafts
// Try to guess the correct offset from the blog's options.
$timezone_string = get_option( 'timezone_string' );
if ( $timezone_string && $date_time ) {
$timezone = timezone_open( $timezone_string );
if ( $timezone ) {
$offset = $timezone->getOffset( $date_time );
}
} else {
$offset = 3600 * get_option( 'gmt_offset' );
}
} else {
$offset = $timestamp - $timestamp_gmt;
}
$west = $offset < 0;
$offset = abs( $offset );
$hours = (int) floor( $offset / 3600 );
$offset -= $hours * 3600;
$minutes = (int) floor( $offset / 60 );
}
return (string) gmdate( 'Y-m-d\\TH:i:s', $timestamp ) . sprintf( '%s%02d:%02d', $west ? '-' : '+', $hours, $minutes );
}
/**
* Returns ISO 8601 formatted duration interval: P0DT1H10M0S
*
* @param string $time Duration in minutes or hours.
*
* @return null|string
*/
static function format_duration( $time ) {
$timestamp = strtotime( $time, 0 );
// Bail early if we don't recognize a date.
if ( empty( $timestamp ) ) {
return;
}
$days = floor( $timestamp / 86400 );
$timestamp = $timestamp % 86400;
$hours = floor( $timestamp / 3600 );
$timestamp = $timestamp % 3600;
$minutes = floor( $timestamp / 60 );
$timestamp = $timestamp % 60;
return (string) sprintf(
'P%dDT%dH%dM%dS',
$days,
$hours,
$minutes,
$timestamp
);
}
}