1

我正在为我的学校制定圣诞日历,当我注意到这一点时,Date-class 并不是我想象的那样。

它从客户端 CPU 获取时间,但这是行不通的。

所以,我一直在网上四处寻找,但没有好的答案(至少我可以理解)。

所以这里是:

如何从托管我的闪存程序的服务器或某些外部时间服务器获取 UTC +1 的时间和日期 (*)?

*在 UNIX 时代,或者其他 actionscript 3 可以理解

我对答案的搜索对一些 php-scripts 提出了建议,但我不明白如何使用它(那里有几个例子,但它们在 AS2 中)。

4

3 回答 3

1

您可以像这样将日期传递给 swf 文件:

<param name=FlashVars value="date=<?php date(); ?>" />

您可以在此处阅读有关如何将日期传递给 swf 文件的更多信息:http: //helpx.adobe.com/flash/kb/pass-variables-swfs-flashvars.html 以及有关如何在此处格式化日期的更多信息: http: //php.net/manual/en/function.date.php

在此变体中,必须将您的 .html 文件重命名为 .php。

于 2012-09-20T20:02:05.423 回答
1

一种更安全的方法(例如,不使用可被篡改的闪存变量)是创建一个非常简单的服务器页面(输出纯文本而不是 html)输出日期,然后使用加载器将其加载到闪存中并将其解析为本机Date对象。

闪存端看起来像这样:

var loader:URLLoader = new URLLoader()
loader.load(new URLRequest("your server page"))
loader.addEventListener(Event.COMPLETE, onLoaded)
function onLoaded(evt:Event){
    var date:Date;
    try{
        date = new Date(Number(loader.data)); //need to cast the loader data as a number
    }catch(e:Error){
    }

    if(!date){
        //your output from the server isn't formatted in a way flash can convert it
        date = new Date(); //use local time
    }
}

使用 try/catch 的原因是,如果服务器的输出不是有效日期,它会在尝试转换时抛出错误。如果在 try 块内的任何地方抛出错误,它将在错误行退出(跳过其余代码)并运行 catch 块中的内容。如果 try 块中没有错误,catch 块中的代码将永远不会运行。


使用 PHP(虽然我没有方便检查的 php,所以这可能需要有人纠正,而且我用它编程已经有 10 年了)

<?php 
    header("Content-Type: text/plain");
    print time() * 1000;
?>
于 2012-09-20T21:25:44.633 回答
0

所以总结一下,答案是一个只包含这个的 php 脚本:

<?php 
header("Content-Type: text/plain");
print time();
?>

我用来从服务器获取时间的脚本是:

//cut from a larger script
{
loader = new URLLoader();
loader.load(new URLRequest("http://grambogames.net/serverTime.php"));
loader.addEventListener(Event.COMPLETE, onServerTimeLoad);
trace("waiting for time to load");
}



private function onServerTimeLoad(e:Event):void
{
trace("date loaded:", loader.data);
try
{
    var num:Number = Number(loader.data) * 1000
    dato = new Date(num);
    trace("tid & dato synkronisert med server.", dato);
}
catch (e:Error)
{
    //the passed date was invalid, lets just use the local system date
    dato = new Date();
    trace("date did not work, local time used");
    txt_error.text = "ERROR! COULD NOT GET TIME FROM SERVER!"
}
    if (! dato)
{
    //your output from the server isn't formatted in a way flash can convert it
    trace("not working, date farmated wrong");
}
}

感谢 LondonDrugs_MediaServices

...我只是希望没有更多的错误出现。

于 2012-09-24T20:11:05.303 回答