PluginProbe
Booktics – Appointment Booking Calendar for Service Businesses / 1.0.19
Booktics – Appointment Booking Calendar for Service Businesses v1.0.19
1.0.25 1.0.24 1.0.23 1.0.22 1.0.21 1.0.20 1.0.19 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 All 27 releases
booktics / base / services / time-zone-handler.php

time-zone-handler.php in Booktics – Appointment Booking Calendar for Service Businesses 1.0.19, at base/services/time-zone-handler.php

95 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Booktics\Services;
4
5 use DateTime;
6 use DateTimeZone;
7
8 /**
9 * Handles timezone conversions and validations for date/time operations
10 */
11 class Time_Zone_Handler {
12 /**
13 * Converts a local time to UTC
14 *
15 * @param string $time Time in format H:i:s
16 * @param string $date Date in format Y-m-d
17 * @param string $timezone Source timezone identifier
18 *
19 * @return array Array containing converted 'time' and 'date'
20 */
21 public static function convert_to_utc( string $time, string $date, string $timezone ) {
22 // If date already contains timezone information, use it directly
23 if (strpos($date, 'T') !== false) {
24 $date = substr($date, 0, strpos($date, 'T')); // Extract just the date part (before the 'T')
25 }
26
27 $datetime = new DateTime( "$date $time", new DateTimeZone( $timezone ) );
28 $datetime->setTimezone( new DateTimeZone( 'UTC' ) );
29
30 return array(
31 'time' => $datetime->format( 'H:i:s' ),
32 'date' => $datetime->format( 'Y-m-d' ),
33 );
34 }
35
36 /**
37 * Converts a UTC time to local timezone
38 *
39 * @param string $time Time in format H:i:s
40 * @param string $date Date in format Y-m-d
41 * @param string $timezone Target timezone identifier
42 *
43 * @return array Array containing converted 'time' and 'date'
44 */
45 /**
46 * @return array
47 */
48 public static function convertFromUTC( string $time, string $date, string $timezone ) {
49 $datetime = new DateTime( "$date $time", new DateTimeZone( 'UTC' ) );
50 $datetime->setTimezone( new DateTimeZone( $timezone ) );
51
52 return array(
53 'time' => $datetime->format( 'H:i:s' ),
54 'date' => $datetime->format( 'Y-m-d' ),
55 );
56 }
57
58 /**
59 * Validates if the provided timezone identifier is valid
60 *
61 * @param string $timezone Timezone identifier to validate
62 *
63 * @return bool True if timezone is valid, false otherwise
64 */
65 /**
66 * @return bool
67 */
68 public static function validate_time_zone( string $timezone ) {
69 return in_array( $timezone, DateTimeZone::listIdentifiers() );
70 }
71
72 /**
73 * Handles timezone string to DateTimeZone object conversion
74 * In case the timezone string is invalid, returns default timezone
75 * If timezone is already a DateTimeZone object, returns it as it is
76 *
77 * @param string|DateTimeZone $timezone Timezone string
78 *
79 * @return DateTimeZone
80 */
81 public static function get_timezone_from_string( $timezone ) {
82 // If timezone is already a DateTimeZone object, return as it is
83 if ( $timezone instanceof DateTimeZone ) {
84 return $timezone;
85 }
86 // Incase of invalid timezone string, return default timezone
87 if ( ! is_string( $timezone ) ) {
88 return wp_timezone();
89 }
90
91 // Validate and return a DateTimeZone object
92 return self::validate_time_zone( $timezone ) ? new DateTimeZone($timezone) : wp_timezone();
93 }
94 }
95