javascript函数将当前时间(从纪元)舍入到最接近的分钟

时间:2017-06-08 19:02:40

标签: javascript php datetime

我一直在撞墙试图获得与此PHP代码段相当的JavaScript:

<?php
$id  = 'uniqueID'
$now = round(time()/60);
$lock = md5($now . $id);
?>

我一直在尝试各种变体:

var timeInMin = new Date().getTime() / 60000;
var timestamp = Math.round(timeInMin);
var key = md5(timestamp + 'uniqueID');

使用here

中的md5脚本

我只需要锁和钥匙来匹配。对我来说似乎很简单。我做错了什么?

2 个答案:

答案 0 :(得分:1)

如前所述,如果时间不匹配则不会创建相同的哈希值。我在这种情况下所做的是找到将时间从php传递到客户端的方法,这样他们就可以使用相同的时间。

PHP方面:

<?php
    $id  = 'uniqueID';
    $now = round(time()/60);
    $lock = md5($now . $id);
    print $lock;
    setcookie("time",$now);
?>

客户端:

<script type="text/javascript">
    var timestamp = getCookie("time");
    var key = md5(timestamp + 'uniqueID');
    console.log(key);
</script>
  • 请注意,getCookie是一个快捷功能
  • 以下示例以简单的形式呈现该想法。我不会将时间用作cookie的名称,也不会访问vars(包含在函数中)。在这种情况下,Uglify脚本会有很长的路要走。

答案 1 :(得分:0)

具体而言(我的评论略显滑稽):

PHP是服务器端语言。当您的浏览器通过Internet(或甚至是本地计算机上的侦听端口)发出页面请求时,在服务器(或本地计算机)上运行的apache实例会在页面上执行PHP,然后将其吐回到浏览器。

然后浏览器会在页面上执行任何JavaScript,我们将其称为客户端

因为您正在使用Math.round,如果服务器执行PHP(服务器端)的时间与浏览器开始执行相关Javascript(客户端)之间的时间超过30秒,那么几分钟的时间会有所不同。使用Math.floor会给你59秒的摆动空间,但这仍然很冒险,特别是在移动设备上。

即使假设页面在加载后立即执行JavaScript并且加载非常快,30秒的延迟也不会完全离开桌面,而在移动设备上也不是59。