【问题标题】:Countdown timer showing wrong for the given date and time倒数计时器在给定的日期和时间显示错误
【发布时间】:2020-06-08 12:29:12
【问题描述】:

我正在创建一个简单的倒数计时器,它从两个日期中获取差异并输出如下:01 天 23 小时 59 分钟

在 PHP 中:

$this_is_old_date = 2020-06-08 13:52:18; // let's take it as tody date
$old_date = DateTime::createFromFormat('Y-m-d H:i:s', $this_is_old_date);
$expire = clone $old_date;
$expire->add(new DateInterval('P2D')); // add two days from today date
$exp = $expire->format('Y-m-d H:i:s');

一切正常

在javascript中:

function getTimeRemaining(expire) {
    var t = Date.parse(expire) - Date.parse(new Date());
    var seconds = Math.floor((t / 1000) % 60);
    var minutes = Math.floor((t / 1000 / 60) % 60);
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);
    var days = Math.floor(t / (1000 * 60 * 60 * 24));
    return {
        'total': t,
        'days': days,
        'hours': hours,
        'minutes': minutes,
        'seconds': seconds
    };
}

var expire = "<?php echo $exp; ?>";
getTimeRemaining(expire);

当我调用这个函数 getTimeRemaining(expire) 它以 1 天 20 小时 30 分钟 开头,但我的预期时间是 01 天 23 小时 59 分钟 如何解决它?

提前致谢:)

【问题讨论】:

  • expire 创建日期的来源是什么?返回值的 3,5h 差异似乎可能存在时区问题(例如:您的本地与服务器/数据库/其他客户端)。
  • 过期日期来自 $exp 变量 (var expire = "";)。
  • 您的问题是关于格式(开头缺少 0)还是 3 小时的差异?
  • 我关于 3 小时差异的问题
  • @karthik 是的,我可以看到,对不起,心理捷径...$this_is_old_date 来自哪里?

标签: javascript php datetime


【解决方案1】:

尝试将所有日期设为同一时区(以解决 cmets 中提到的 @cyborg86pl 的差异错误)

做这样的事情。

PHP:


date_default_timezone_set('UTC')

$this_is_old_date = 2020-06-08 13:52:18; // let's take it as tody date
$old_date = DateTime::createFromFormat('Y-m-d H:i:s', $this_is_old_date);
$expire = clone $old_date;
$expire->add(new DateInterval('P2D')); // add two days from today date
$exp = $expire->format('Y-m-d H:i:s');

JavaScript:

function utcDate(date) {
    return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()));
}

function getTimeRemaining(expire) {
    var t = utcDate(new Date(Date.parse(expire))) - utcDate(new Date());
    var seconds = Math.floor((t / 1000) % 60);
    var minutes = Math.floor((t / 1000 / 60) % 60);
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);
    var days = Math.floor(t / (1000 * 60 * 60 * 24));
    return {
        'total': t,
        'days': days,
        'hours': hours,
        'minutes': minutes,
        'seconds': seconds
    };
}

var expire = "<?php echo $exp; ?>";
getTimeRemaining(expire);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多