You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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端稳定(避免客户端时区设置干扰)。
验证方法

修改后可通过以下步骤确认结果正确:

  1. 打印PHP生成的countDownDate和now,核对是否对应澳大利亚时间;
  2. 手动计算澳大利亚当前时间到目标时间的差值,对比倒计时显示结果。

内容的提问来源于stack exchange,提问作者matt.mcg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:15:38