wenpai.org/wp-content/plugins/block-visibility/includes/utils/create-date-time.php
2024-06-21 23:57:39 +08:00

78 lines
2 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Helper function for turning a string into a DateTime object.
*
* @package block-visibility
* @since 1.0.0
*/
namespace BlockVisibility\Utils;
defined( 'ABSPATH' ) || exit;
/**
* WordPress dependencies
*/
use DateTime;
use DateTimeZone;
/**
* This function takes a date string and converts it into a DateTime object.
* By default it will localize the date string to the WordPress site's timezone.
* Alternatively it can respect the date string and just add the correct
* timezone without actually changing the time itself.
*
* If no timestamp is given, it returns the current time.
*
* @since 1.1.0
*
* @param string $timestamp The time string.
* @param boolean $localize Should we localize the time string, or just append the timezone.
* @return Object Return the DateTime object for the timestamp and timezone.
*/
function create_date_time( $timestamp = null, $localize = true ) {
// The timezone settings from the WordPress general settings.
$tz_string = get_option( 'timezone_string' );
$tz_offset = get_option( 'gmt_offset', 0 );
if ( ! empty( $tz_string ) ) {
// If site timezone option string exists, use it.
$timezone = $tz_string;
} elseif ( 0 === $tz_offset ) {
// Get UTC offset, if it isnt set then return UTC.
$timezone = 'UTC';
} else {
// Fix to ajust timezone for locals that are offset by 30 or 45 minutes.
if ( strpos( $tz_offset, '.5' ) ) {
$tz_offset = str_replace( '.5', ':30', $tz_offset );
} elseif ( strpos( $tz_offset, '.75' ) ) {
$tz_offset = str_replace( '.75', ':45', $tz_offset );
}
$timezone = $tz_offset;
if (
substr( $tz_offset, 0, 1 ) !== '-'
&& substr( $tz_offset, 0, 1 ) !== '+'
&& substr( $tz_offset, 0, 1 ) !== 'U'
) {
$timezone = '+' . $tz_offset;
}
}
if ( null === $timestamp ) {
$timestamp = time();
}
if ( $localize ) {
$datetime = new DateTime( $timestamp );
$datetime->setTimezone( new DateTimeZone( $timezone ) );
} else {
$datetime = new DateTime( $timestamp, new DateTimeZone( $timezone ) );
}
return $datetime;
}