如何在PHP中获取澳大利亚时区的日期/时间?倒计时器修正
问题分析
你的倒计时结果偏差核心原因是时区不匹配:当前代码里的time()和strtotime()默认使用服务器时区(非澳大利亚时区)计算时间戳,导致时间差计算错误,最终出现结果偏差。
解决方案
要让所有时间计算基于澳大利亚时区(比如常见的Australia/Sydney东部时区),推荐两种修正方式:
方式一:PHP端修正时区(更可靠)
强制PHP使用澳大利亚时区生成时间戳,确保目标时间和当前时间的时区统一:
<?php // 设置为澳大利亚东部时区,可根据需求换成Australia/Melbourne、Australia/Brisbane等 date_default_timezone_set('Australia/Sydney'); $clearance_date = 'August 20, 2022 09:00:00'; ?> <p id="demo"></p> <script> // 目标时间(已转换为澳大利亚时区的时间戳) var countDownDate = <?php echo strtotime($clearance_date) ?> * 1000; // 当前澳大利亚时区的时间戳 var now = <?php echo time() ?> * 1000; // 每秒更新倒计时 var x = setInterval(function() { now = now + 1000; var distance = countDownDate - now; // 计算天、时、分、秒 var days = Math.floor(distance / (1000 * 60 * 60 * 24)); var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((distance % (1000 * 60)) / 1000); document.getElementById("demo").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s "; // 倒计时结束提示 if (distance < 0) { clearInterval(x); document.getElementById("demo").innerHTML = "EXPIRED"; } }, 1000); </script>
关键说明
date_default_timezone_set()会强制PHP用指定时区解析目标时间、生成当前时间戳,彻底避免时区不匹配问题;- 澳大利亚不同地区时区略有差异,根据实际场景选择对应时区标识即可。
方式二:JavaScript端直接处理时区
如果不想依赖PHP配置,可在JS中直接指定澳大利亚时区处理时间:
<p id="demo"></p> <script> // 目标时间:澳大利亚东部时间2022年8月20日09:00:00(GMT+10为标准时间,夏令时为GMT+11) var countDownDate = new Date('August 20, 2022 09:00:00 GMT+1000').getTime(); // 每秒更新倒计时 var x = setInterval(function() { // 将当前时间转换为澳大利亚东部时区 var nowStr = new Date().toLocaleString("en-US", {timeZone: "Australia/Sydney"}); var now = new Date(nowStr).getTime(); var distance = countDownDate - now; // 计算天、时、分、秒 var days = Math.floor(distance / (1000 * 60 * 60 * 24)); var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((distance % (1000 * 60)) / 1000); document.getElementById("demo").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s "; // 倒计时结束提示 if (distance < 0) { clearInterval(x); document.getElementById("demo").innerHTML = "EXPIRED"; } }, 1000); </script>
关键说明
- 这种方式依赖客户端JS环境的时区支持,兼容性较好,但不如PHP端稳定(避免客户端时区设置干扰)。
验证方法
修改后可通过以下步骤确认结果正确:
- 打印PHP生成的
countDownDate和now,核对是否对应澳大利亚时间; - 手动计算澳大利亚当前时间到目标时间的差值,对比倒计时显示结果。
内容的提问来源于stack exchange,提问作者matt.mcg
相关产品推荐
相关产品推荐

