0

我需要创建一个从 XML 文件中读取截止日期的倒计时脚本,

XML 文件:

<?xml version="1.0" ?>
<Imskia ID="Ramadan2012">
<day date="2012, 7 - 1, 23">
    <Fagr>3:26</Fagr>
    <Shrok>5:22</Shrok>
    <Dohr>12:02</Dohr>
    <Asr>3:38</Asr>
    <Maghrb>6:57</Maghrb>
    <Ishaa>8:27</Ishaa>
</day>
<day date="2012, 7 - 1, 24">
    <Fagr>3:26</Fagr>
    <Shrok>5:22</Shrok>
    <Dohr>12:02</Dohr>
    <Asr>3:38</Asr>
    <Maghrb>6:59</Maghrb>
    <Ishaa>8:27</Ishaa>
</day>  
</Imskia>

这里是 HTML 文件中的 Javascipt:

$(document).ready(function(){
    $.get('test.xml', function(d){
    $(d).find('day').each(function(){

        var $day = $(this); 
        var date = $day.attr("date");
        var Maghrb = $day.find('Maghrb').text();

        $('body').append($(html));

    //countdown 
    $('#defaultCountdown').countdown({ 
        until: new Date(date), timezone: +2
    });             

    });
});


});

问题是倒计时脚本没有从 XML 文件中读取存储日期的变量,但是当手动放置它时它可以正常工作,如下所示:

    //countdown 
    $('#defaultCountdown').countdown({ 
        until: new Date(2012, 7 - 1, 24), timezone: +2
    });     
4

1 回答 1

1

当你这样做

var date = $day.attr("date");

date保存一个字符串文字("2012, 7 - 1, 23"对于第一种情况)。您需要做的是以某种方式将此字符串文字转换为 JavaScriptDate对象。如果您可以不使用月份组件中的减法(即,将日期字符串保留为"2012, 6, 23",那么获取日期的最简单方法是

// split along the commas to get an array
var dateComponents = $day.attr("date").split(', '); 
var date = new Date(dateComponents[0], dateComponents[1], dateComponents[2]);

请注意,new Date()(月份组件)的第二个参数是 0 索引的,因此一月是 0,十二月是 11。

您可以将倒计时更改为

$('#defaultCountdown').countdown({ 
    until: date, timezone: +2
});             

但是,如果更改日期格式不是一个选项,eval应该可以帮助您将减法字符串转换为其实际值。在这种情况下,代码将是

// split along the commas to get an array
var dateComponents = $day.attr("date").split(', ');
var date = new Date(dateComponents[0], eval(dateComponents[1]), dateComponents[2]);
于 2012-07-22T13:20:19.260 回答