为了账号安全,请及时绑定邮箱和手机立即绑定

倒计时与 PHP 的 Javascript 错误计算

倒计时与 PHP 的 Javascript 错误计算

PHP
温温酱 2023-03-11 15:29:47
我正在尝试制作倒数计时器。我正在使用 PHP 和 Javascript。我面临的问题是时差显示比 php 晚了一段时间。如果 PHP 显示 19 小时,则 Javascript 显示 16 小时。我的函数显示与 PHP 的时差$timestamp = strtotime($time['expiration']) - time();function convert_timestamp_to_date($timestamp){  $date1 = new DateTime("@0");  $date2 = new DateTime("@$timestamp");  if ($date1->diff($date2)->d < 1) {    return $date1->diff($date2)->format('%h Hours');  } else {    return $date1->diff($date2)->format('%a Days');  }}我的函数用 Javascript 显示时差// $job['job_expiration'] = 2020-05-13 15:24:22function countdownTimer() {    const difference = +new Date("<?php echo $job['job_expiration']; ?>") - +new Date();    let remaining = "Time's up!";    if (difference > 0) {        const parts = {            days: Math.floor(difference / (1000 * 60 * 60 * 24)),            hours: Math.floor((difference / (1000 * 60 * 60)) % 24),            minutes: Math.floor((difference / 1000 / 60) % 60),            seconds: Math.floor((difference / 1000) % 60)        };        remaining = Object.keys(parts)            .map(part => {                if (!parts[part]) return;                return `${parts[part]} ${part}`;            })            .join(" ");    }    document.getElementById("countdown").innerHTML = remaining;}countdownTimer();setInterval(countdownTimer, 1000);
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

它看起来像一个时区差异问题。

如果您在 中输入类似“2020-05-13 15:24:22”的字符串Date(),它会假定该字符串在计算机的时区内。

例如,我的电脑处于太平洋夏令时 (GMT - 7) 时区:

let date1 = new Date("2020-05-13 10:56:50");
console.log(date1); // '2020-05-13T17:56:50.000Z'

请注意,Date7 小时后将我的太平洋夏令时转换为 UTC。

如果您只是简单地调用Date()而不带任何参数,您将获得 UTC 时区的当前日期和时间:

let date2 = new Date();
console.log(date2); // '2020-05-12T17:57:36.088Z'

从示例中很难确定,但很可能是 PHP 时间:

<?php echo $job['job_expiration']; ?>

在服务器的时区中,但 JavaScript 在具有不同时区的客户端计算机上运行。

关于处理时区的建议

避免弄乱时区的一个好规则是始终以 UTC 格式存储和操作日期,然后将它们转换为本地时间仅用于显示。

如果您使用字符串作为 的参数new Date,请确保该字符串采用 UTC 时间:

let date = new Date('2020-05-12T17:56:50.000Z');

尾随的“Z”表示此日期字符串处于 UTC(“zulu”)时区。


查看完整回答
反对 回复 2023-03-11
  • 1 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号