公司官网使用的是dedecms,在自定义表单中新建了一个表单作为留言框,而且需要记录用户留言的时间。

初步是想法是用户打开页面的时候,记录时间,然后写入到一个隐藏的input里面,跟随表单提交即可。

原先使用获取时间的js如下:

$(function() {
    var nowDate = new Date();
    var str = nowDate.getFullYear() + "-" + (nowDate.getMonth() + 1) + "-" + nowDate.getDate() + " " + nowDate.getHours() + ":" + nowDate.getMinutes() + ":" + nowDate.getSeconds();
    document.getElementById("time").value = str;
});

html如下:

<input type="hidden" name="times" id="times" class="intxt" value="">

功能是实现了,但是后来查看留言时候发现,居然有些人留言是2008年,2009年,2010年等,我擦咧,这是穿越了吗?

才发现上面的js获取来的是用户电脑的时间,如果用户电脑时间不正确的话,就会出现上面说的那种情况。

百度一番,找到以下的可用JS:

ajax();
function ajax(option) {
    var xhr = null;
    if (window.XMLHttpRequest) {
        xhr = new window.XMLHttpRequest();
    } else { // ie
        xhr = new ActiveObject("Microsoft")
    }
    // 通过get的方式请求当前文件
    xhr.open("get", "/");
    xhr.send(null);
    // 监听请求状态变化
    xhr.onreadystatechange = function() {
        var time = null,
        curDate = null;
        if (xhr.readyState === 2) {
            // 获取响应头里的时间戳
            time = xhr.getResponseHeader("Date");
            console.log(xhr.getAllResponseHeaders()) curDate = new Date(time);
            document.getElementById("time").innerHTML = "服务器时间是:" + curDate.getFullYear() + "-" + (curDate.getMonth() + 1) + "-" + curDate.getDate() + " " + curDate.getHours() + ":" + curDate.getMinutes() + ":" + curDate.getSeconds();
        }
    }
}

html如下:

<p id="time"></p>

这样子获取到的时间就是服务器上面的时间啦,只要服务器时间正常就好了。