javascript - Javascript 计时器比 php mysql 晚 5 小时
问题描述
我正在开发一个用户可以发布/申请工作的项目。如果用户发布了一个交货时间为 2 天的工作。插入数据库时,我在当前时间增加了 2 天。然后我向用户显示倒计时,显示 PHP 和 Javascript 还剩下多少天、小时、分钟、秒。但是 Javascript 比 PHP 晚了 5 个小时。我问过这个问题,用户告诉我:这看起来像是时区差异问题。我必须以 UTC 存储和操作日期。
为了让 PHP 使用 UTC,我做了:date_default_timezone_set('UTC');
对于 Mysql:UTC_TIMESTAMP() + INTERVAL " . $job['delivery_time'] . "
对于 Javascript:var endDate = new Date("<?php echo $job['job_expiration']; ?>");
但是计时器仍然比 PHP、Mysql 晚了 5 个小时。
"INSERT INTO jobs(job_expiration) VALUES(UTC_TIMESTAMP() + INTERVAL " . $job['delivery_time'] . ")";
像这样。
我正在使用UTC_TIMESTAMP
,NOW()
因此我可以选择时间少于四个小时的工作,而无需选择所有工作。
我该如何解决这个问题?
<?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-17 13:30:24
function countdownTimer() {
// original code
//const difference = +new Date("<?php echo $job['job_expiration']; ?>") - +new Date();
// modified for stackoverflow
const difference = +new Date("2020-05-17 13:30:24") - +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);
<div id="countdown"></div>
解决方案
推荐阅读
- python - 是否可以从函数中返回字典或系列以及数据框?
- sql - 按键值表中的多行过滤结果
- sql - 如何将案例的总数除以总总数
- node.js - 管理 puppeteer 的内存和性能
- ember.js - Ember-Drag-Sort:“句柄”选择器的使用导致 dragEnd 参数被传递未定义
- node.js - 将 await / async 与 Puppeter 函数一起使用时出错
- ruby-on-rails - 如何在装饰器中定义关联?
- android - 我的 Android socket.io 正在发送数据但未接收数据
- entity-framework-core - Entity Framework Core Migrations 自定义历史表列
- javascript - 在javascript中遍历带有嵌套循环的数组