ActionScript3中的xml
Im使用以下代码为网站创建简单的倒计时:ActionScript3中的xml,xml,actionscript-3,Xml,Actionscript 3,Im使用以下代码为网站创建简单的倒计时: //Create your Date() object var endDate:Date = new Date(2009,8,5); //Create your Timer object //The time being set with milliseconds(1000 milliseconds = 1 second) var countdownTimer:Timer = new Timer(1000); //Adding an event lis
//Create your Date() object
var endDate:Date = new Date(2009,8,5);
//Create your Timer object
//The time being set with milliseconds(1000 milliseconds = 1 second)
var countdownTimer:Timer = new Timer(1000);
//Adding an event listener to the timer object
countdownTimer.addEventListener(TimerEvent.TIMER, updateTime);
//Initializing timer object
countdownTimer.start();
//Calculate the time remaining as it is being updated
function updateTime(e:TimerEvent):void
{
//Current time
var now:Date = new Date();
var timeLeft:Number = endDate.getTime() - now.getTime();
//Converting the remaining time into seconds, minutes, hours, and days
var seconds:Number = Math.floor(timeLeft / 1000);
var minutes:Number = Math.floor(seconds / 60);
var hours:Number = Math.floor(minutes / 60);
var days:Number = Math.floor(hours / 24);
//Storing the remainder of this division problem
seconds %= 60;
minutes %= 60;
hours %= 24;
//Converting numerical values into strings so that
//we string all of these numbers together for the display
var sec:String = seconds.toString();
var min:String = minutes.toString();
var hrs:String = hours.toString();
var d:String = days.toString();
//Setting up a few restrictions for when the current time reaches a single digit
if (sec.length < 2) {
sec = "0" + sec;
}
if (min.length < 2) {
min = "0" + min;
}
if (hrs.length < 2) {
hrs = "0" + hrs;
}
if (d.length < 2) {
d = "0" + d;
}
//Stringing all of the numbers together for the display
var time:String = d + ":" + hrs + ":" + min + ":" + sec;
//Setting the string to the display
time_txt.text = time;
}
(代码的其余部分如上所述,但例如省略)
trace语句显示从xml文件加载的日期是正确的,但是倒计时已经过了几千天
我认为这可能与数据类型是int而不是字符串有关,但不太确定。有没有办法让这一切顺利进行
编辑: 以下是原始问题的XML格式:
<countdown> 2009,8,5 </countdown>
2009,8,5
您可能需要解析生成的xml字符串,并以更明确的方式创建日期:
var endDate:Date = new Date(xml.@year, xml.@month, xml.@date, xml.@hour, xml.@minutes, xml.@seconds, xml.@ms)
请务必记住,有几个日期属性是0索引。具体是月份。XML中的日期格式是什么?如果您使用的是从C#传递的时间戳,那么您需要知道它们的格式从第0年开始,而ActionScript从1970年开始。下面是一个C#中的快速代码片段,可以将其转换为: 否则,乔尔建议的是一个好的解决方案
编辑: 给定如下所示的xml字符串:
<countdown> 2009,8,5 </countdown>
但我可能会选择更好的XML格式:
package
{
import flash.display.Sprite;
public class DateTest extends Sprite
{
public function DateTest()
{
var xml:XML = <countdown year='2009' month='8' day='5' />;
// put it into a date object
// NOTE: we -1 from the month since months are 0 based
var endDate:Date = new Date(xml.@year, xml.@month - 1, xml.@day);
trace(endDate);
}
}
}
包
{
导入flash.display.Sprite;
公共类DateTest扩展了Sprite
{
公共函数DateTest()
{
var-xml:xml=;
//将其放入日期对象中
//注意:我们从月份开始计算-1,因为月份是以0为基础的
var endDate:Date=新日期(xml.@year,xml.@month-1,xml.@day);
跟踪(结束日期);
}
}
}
注意。您的代码中有一个很大的错误。
您正在加载XML之前实例化endDate。
只有在调用loadXML时才会加载xml。这意味着xml是空的,并用空值实例化日期,它将给您Unix纪元的乞讨作为时间戳(Thu Jan 1 02:00:00 GMT+0200 1970),从而产生“几千”天的差异
我只想指出另一个明显的错误。
正确加载xml并跟踪(2000,8,5),然后使用该值进行倒计时就像(错误地)调用日期构造函数一样
var endDate:Date = new Date("2009,8,5"); // note the quotes
// because what you trace from the xml is a string
与第一个示例中使用的正确调用相反。
否则,Joel给出了一个示例,说明如果要更改xml结构,如何轻松地将该值传递给日期构造函数
如果要测试endDate跟踪输出,则会收到无效的日期
如果您不想接触您的xml,那么可以使用类似这样的内容
//load in xml
var xml:int = 0
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loadXML);
loader.load(new URLRequest("countdown.xml"));
var endDate:Date;
function loadXML(e:Event):void
{
var xml = new XML(e.target.data) ;
var xmlDate:Array = String(xml).split(",");
endDate = new Date(parseInt(xmlDate[0]), parseInt(xmlDate[1])-1, parseInt(xmlDate[2]));
trace(endDate);
}
我的xml文件如下所示:2009,8,5这是我第一次尝试使用xml文件,因此我不确定如何正确构造它?因此,我是否需要在xml文件中的不同标记中包含年、月、日期、小时等。你能给我一个如何设置xml的例子吗,因为目前我有:2009,8,5,基于xml格式,我已经更新了我的答案。谢谢,现在效果很好。不过,我确实删除了parseInt(xmlDate[1])之后的-1,因为它将日期设置为1个月,并且不太清楚为什么要在那里添加这个值。因为,正如其他人所提到的,month属性是零索引。这当然取决于如何提供xml。“2009.8.5”这个字串让我想起了8月5日。这只是一件需要记住的事情。
package
{
import flash.display.Sprite;
public class DateTest extends Sprite
{
public function DateTest()
{
var xml:XML = <countdown year='2009' month='8' day='5' />;
// put it into a date object
// NOTE: we -1 from the month since months are 0 based
var endDate:Date = new Date(xml.@year, xml.@month - 1, xml.@day);
trace(endDate);
}
}
}
var endDate:Date = new Date("2009,8,5"); // note the quotes
// because what you trace from the xml is a string
//load in xml
var xml:int = 0
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loadXML);
loader.load(new URLRequest("countdown.xml"));
var endDate:Date;
function loadXML(e:Event):void
{
var xml = new XML(e.target.data) ;
var xmlDate:Array = String(xml).split(",");
endDate = new Date(parseInt(xmlDate[0]), parseInt(xmlDate[1])-1, parseInt(xmlDate[2]));
trace(endDate);
}