<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// This example script is intended to demonstrate how to handle timezone issues when using date_default_timezone_get() together with strtotime() in PHP.</span></span><span>
</span><span><span class="hljs-comment">// The previous comments are not related to the main content, so they are separated by a horizontal line.</span></span><span>
<p></span>// ------------------------------------------------------------<span></p>
<p><span class="hljs-comment">/**</p>
<ul data-is-last-node="" data-is-only-node="">
<li>
<p>How to Resolve Timezone Issues When Using date_default_timezone_get() with strtotime()</p>
</li>
<li></li>
<li>
<p>In PHP, <code>date_default_timezone_get()
echo date_default_timezone_get(); // May output UTC
echo strtotime("2025-08-13 12:00:00"); // Result will be based on UTC
This is especially common when development and production environments differ, for example, if the local default timezone is Asia/Shanghai,
but the production server is UTC, resulting in a several-hour difference in parsed time.
Solutions
Explicitly Set the Default Timezone
Use date_default_timezone_set() at the beginning of the script to ensure consistent time parsing regardless of the environment.
date_default_timezone_set('Asia/Shanghai');
$timestamp = strtotime("2025-08-13 12:00:00");
echo date("Y-m-d H:i:s", $timestamp);
Use Time Strings with Timezone in strtotime
If you do not want to change the default timezone globally, you can specify the timezone in the string passed to strtotime():
$timestamp = strtotime("2025-08-13 12:00:00 +08:00");
echo date("Y-m-d H:i:s", $timestamp);
This ensures correct parsing as Beijing time, even if the default timezone is UTC.
Use DateTime Objects
DateTime objects offer more flexible timezone control, allowing you to set the target timezone when creating the object:
$dt = new DateTime("2025-08-13 12:00:00", new DateTimeZone("Asia/Shanghai"));
echo $dt->getTimestamp();
Summary
date_default_timezone_get() reflects the current default timezone, which may not match your intended business timezone.
strtotime() relies entirely on the default timezone when parsing strings, unless the string itself includes timezone information.
Best practice: either set the timezone globally or explicitly provide the timezone during each parsing to avoid discrepancies caused by environment differences.
*/