比较 PHP/Javascript 中的时间戳
Comparing Timestamps in PHP/Javascript
我正在开发一个基于Web的应用程序,用于检查服务器上的更新并通知用户是否有更新。这是推送方法的替代方法;应用程序中的后台进程每小时检查一次 PHP 文件,以查看 MySQL 数据库中是否有新添加的内容。如果有,它会在主屏幕上通知用户。
我遇到麻烦的部分是比较时间戳。我保留了"lastUpdate"
变量,该变量告诉手机上次访问JavaScript文件中本地存储中的PHP文件的时间。每次电话连接时,它都会将变量传递到上次连接时,如果数据库中有任何时间戳大于上次更新的新条目,则通知计数将增加。
.PHP:
$lastUpdate = $_GET["q"];
//connect to server
mysql_select_db("dbr", $con);
$sql="SELECT * FROM notification";
$result = mysql_query($sql);
$updateCount = 0;
if ($lastUpdate == "1970-01-01 01:00:00")
{ $compareTime = time();}
else
{ $compareTime = intval($lastUpdate); }
while($row = mysql_fetch_array($result))
{
$rowTime = strtotime($row['timeAdded']);
if ($rowTime >= $compareTime)
{
$updateCount++;
}
}
echo json_encode( array('lastUpdate' => $compareTime, 'numUpdates' => $updateCount, 'passedValue' => $compareTime) );
JavaScript:
var timedLoop;
var timer_is_on=0;
localStorage.lastUpdate = "1970-01-01 01:00:00";
localStorage.numUpdates = 0;
localStorage.passedValue = ""; //used it for debugging
function timedCount()
{
document.getElementById('testContent').innerHTML = "lastUpdate: " + localStorage.lastUpdate;
document.getElementById('testContent2').innerHTML = "numUpdates: " + localStorage.numUpdates;
document.getElementById('testContent3').innerHTML = "passedValue: " + localStorage.passedValue;
contactServer(localStorage.lastUpdate);
if(Number(localStorage.numUpdates)>0)
{
alert("NOTIFICATIONS AVAILABLE");
notifyUser();
localStorage.numUpdates = 0;
}
document.getElementById('txt').value=new Date();
timedLoop=setTimeout("timedCount()",10000);
}
function contactServer(update)
{
if (window.XMLHttpRequest){ xmlhttp=new XMLHttpRequest();}
else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var result = JSON.parse(xmlhttp.responseText);
localStorage["lastUpdate"] = result["lastUpdate"];
localStorage["numUpdates"] = result["numUpdates"];
localStorage["passedValue"] = result["passedValue"];
}
}
xmlhttp.open("GET","address.php?q="+update,true);
xmlhttp.send();
}
问题是它对我不起作用。我对此相当陌生,所以我不确定我是否正确。函数 timedCount() 通过"onload"加载到主体中,因此它在开始时运行,在这种情况下每 10 秒运行一次。但是时间戳值在前两个循环后停止更改。如果我尝试稍微更改代码,我会得到完全出乎意料的结果。我已经在这里工作了一段时间,所以任何帮助将不胜感激!
1) 从 localStorage.lastUpdate = "1970-01-01 01:00:00";
开始,并将该值作为名为 q
的 GET 参数发送到服务器。
2) 第一次匹配您的 if 语句并执行$compareTime = time();
。此值(当前时间戳)是作为 lastUpdate
JSON 属性返回给 JavaScript 的值。
3)在JavaScript中,你选择这个值并运行localStorage["lastUpdate"] = result["lastUpdate"];
来保存它。十秒过去了,您发出另一个请求,现在将以前的时间戳作为q
参数。
4) 你的 PHP 的 else 语句启动并将给定的 - 以前的 - 时间戳分配给 '$compareTime 变量。因此,您将再次使用相同的数据进行以下 while 循环。
只需返回'lastUpdate' => time()
而不是在该 json_encode() 中即可解决问题。否则,它将继续一遍又一遍地请求相同的时间。
但是我很好奇你如何混合格式。 time() 给出了一个像 1335048166 这样的实际 timestmap,这是一种与 "1970-01-01 01:00:00" 完全不同的格式。如果你在数据库中也有时间戳,我建议在整个应用程序中坚持使用这种格式。
- Javascript Unix时间戳转换
- JavaScript JSON关联对象键和值都作为日期时间戳
- JavaScript到PHP的时间戳失败,增加了大约一个半月的时间
- javascript时间戳插入字符串变量
- 如何使用javascript在嵌入式youtube视频上创建可点击的时间戳链接
- 如何在时间标签和相同的类中以UTC格式重新格式化ISO 8601时间戳,并通过JavaScript根据用户区域设置和时区
- mysql时间戳格式的Javascript regex不起作用
- 如何使用javascript获取最后一个全天时间戳
- 如何使用javascript在网络上仅将UTC时间戳转换为本地时间?从 http://openweathermap.or
- 在javascript中向本地时间戳添加时间戳偏移量
- 根据javascript中的时间戳进行排序
- JavaScript:获取MySQL时间戳和当前日期之间的天数差
- JavaScript将人类可读的日期转换为unix时间戳,然后再转换回来
- 生成时间戳日期|Javascript范围内的空数据
- 使用 JavaScript 的客户端日期/时间戳一致(考虑时区)
- 如何使用javascript在unix时间戳中获取日期
- 几年前的javascript时间戳,并考虑闰年
- 处理日期时间时间戳javascript(angularjs)和mongo的滑块
- 添加自动增量或时间戳 - JavaScript,jstorage
- 从格式化日期获取UTC时间戳-javascript