PHPのdate_sunset関数は、UTCタイムスタンプを返します。サーバータイムゾーンの設定が実際のタイムゾーンと矛盾している場合、表示時間にエラーが発生する可能性があります。したがって、最初のステップは、 date_sunsetが呼び出される前に正しいタイムゾーンが設定されることを確認することです。
<span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>); </span><span><span class="hljs-comment">// タイムゾーンを上海時間に設定します</span></span><span>
</span></span>このようにして、後続の時間計算が正しいタイムゾーンに基づいていることを確認できます。
Date_sunsetはUTCタイムスタンプを返すため、地理的位置が非UTCタイムゾーンにある場合、時間差を手動で調整する必要があります。たとえば、北京時間はUTC時間より8時間高速です。簡単な追加で調整できます。
<span><span><span class="hljs-variable">$sunsetTimestamp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date_sunset</span></span><span>(</span><span><span class="hljs-title function_ invoke__">time</span></span><span>(), SUNFUNCS_RET_TIMESTAMP, </span><span><span class="hljs-number">39.9042</span></span><span>, </span><span><span class="hljs-number">116.4074</span></span><span>); </span><span><span class="hljs-comment">// 北京緯度経度</span></span><span>
</span><span><span class="hljs-variable">$localSunset</span></span><span> = </span><span><span class="hljs-variable">$sunsetTimestamp</span></span><span> + (</span><span><span class="hljs-number">8</span></span><span> * </span><span><span class="hljs-number">3600</span></span><span>); </span><span><span class="hljs-comment">// 北京時間に調整</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"北京の夕日: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>, </span><span><span class="hljs-variable">$localSunset</span></span><span>);
</span></span>夏時間の節約は、時間の計算に影響する一般的な要因です。一部の地域では、夏時間を節約することで、標準時間より1時間前に現地時間を作ることができます。アプリケーションが夏時間をサポートする必要がある場合は、PHPに組み込まれたDateTimeクラスを通じて夏時間を自動的に処理できます。
<span><span><span class="hljs-variable">$datetime</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>();
</span><span><span class="hljs-variable">$datetime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">setTimestamp</span></span><span>(</span><span><span class="hljs-variable">$sunsetTimestamp</span></span><span>);
</span><span><span class="hljs-variable">$datetime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">setTimezone</span></span><span>(</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTimeZone</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>)); </span><span><span class="hljs-comment">// 夏時間を自動的に検討してください</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"調整された日没時間: "</span></span><span> . </span><span><span class="hljs-variable">$datetime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span></span>このようにして、PHPは、タイムゾーンのルールに従って夏時間を調整する必要があるかどうかを自動的に判断します。
時々、タイムスタンプは必要ないかもしれませんが、代わりにフォーマットされた時間文字列を直接取得したいと考えています。その場合、 date_sunsetのsunfuncs_ret_stringパラメーターを使用して、フォーマットされた時間文字列を直接返すことができます。例えば:
<span><span><span class="hljs-variable">$sunsetTime</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date_sunset</span></span><span>(</span><span><span class="hljs-title function_ invoke__">time</span></span><span>(), SUNFUNCS_RET_STRING, </span><span><span class="hljs-number">39.9042</span></span><span>, </span><span><span class="hljs-number">116.4074</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"日没の時間: "</span></span><span> . </span><span><span class="hljs-variable">$sunsetTime</span></span><span>;
</span></span>この時点で、返された時間はすでにローカルタイムゾーンでの時間です(タイムゾーンが正しく設定されることを保証する必要があります)。タイムスタンプのさらなる処理を排除します。
サーバーの現在のタイムゾーン設定について明確にならない場合があります。 date_default_timezone_get関数を介して現在のタイムゾーンを取得し、それに従って時間を調整できます。
<span><span><span class="hljs-variable">$currentTimezone</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date_default_timezone_get</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"現在のタイムゾーン: "</span></span><span> . </span><span><span class="hljs-variable">$currentTimezone</span></span><span>;
</span></span>このようにして、現在のタイムゾーンを動的に取得し、対応する調整を行うことができます。
場合によっては、 date_sunsetで返される時間にはまだ小さなエラーがある場合があります。これらのエラーは通常、天候、地理的環境などの要因に関連しており、コードを介して完全に排除することはできません。特定の偏差(レコードを観察するなど)を知っている場合は、返されたタイムスタンプを手動で調整できます。
<span><span><span class="hljs-variable">$sunsetAdjusted</span></span><span> = </span><span><span class="hljs-variable">$sunsetTimestamp</span></span><span> + </span><span><span class="hljs-number">600</span></span><span>; </span><span><span class="hljs-comment">// 調整10分</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"調整された日没時間: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>, </span><span><span class="hljs-variable">$sunsetAdjusted</span></span><span>);
</span></span>Date_sunsetによって返されるタイムスタンプを処理する場合、タイムゾーン、夏時間の節約時間、地理的位置などの複数の要因を考慮する必要があります。上記の方法により、戻り時間が実際の時間とより一致するようにすることができます。実際のアプリケーションでは、タイムスタンプは、 DateTimeクラス、タイムゾーン設定、夏時間の節約時間ルール、およびさまざまなシナリオのニーズを満たすその他の手段により、より正確に調整できます。