【问题标题】:Greasemonkey script fails passing date/time to GM_setValueGreasemonkey 脚本无法将日期/时间传递给 GM_setValue
【发布时间】:2013-03-17 14:51:05
【问题描述】:

我正在编写一个 Greasemonkey 脚本,我想知道它上次运行的时间。为此,我想用GM_setValue 存储当前时间,并将该时间与再次运行脚本的时间进行比较。

但是,Date().getTime() 结果似乎不会传递给GM_setValue。例如,如果您运行:

var newtime = new Date().getTime();
GM_setValue('lastrun', newtime);
alert(GM_getValue('lastrun'));

显然有错误,因为警告框不会弹出。但是,如果您将第一行替换为:

var newtime = 1;

然后,您会像预期的那样在警报框中返回 1。

这几乎只是隔离了导致问题的日期格式。关于如何处理这个问题的任何想法,或者在脚本运行时间之间保存日期的更好方法?

【问题讨论】:

    标签: javascript greasemonkey


    【解决方案1】:

    我遇到了类似的问题。该数字太大,无法存储为 firefox cookie 值。我的解决方案是将精度限制为秒(除以 1000,减去余数)并减去 43 年(1356998400 秒)以将测量日期从 2013 年 1 月 1 日午夜开始,所以我的代码如下所示:

    var time = Math.floor((new Date().getTime() / 1000) - 1356998400);
    GM_setValue("runTime", time);
    

    检索结果如下:

       var time = GM_getValue("runTime", 0);
            if (time != 0) {
            var cur = Math.floor((new Date().getTime() / 1000) - 1356998400);
            var cur = cur - time;
            var sec = cur % 60;
            var min = Math.floor(cur / 60);
            console.log("Script took " + min + ":" + sec);
            }
    

    【讨论】:

    • 你也可以转换回一个日期对象: var lastrun = new Date((GM_getValue("runTime")+1356998400)*1000);
    猜你喜欢
    • 1970-01-01
    • 2017-10-08
    • 2011-02-14
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多