我正在解析XML文件,以便在我的Google地图中显示数据。一切都很好。我有一个来自我已解析的XML的元素叫做“expires”,这是ISO 8601中XML文件的日期。我有这个代码来格式化日期,当我输入原始静态ISO 8601格式的日期并输出它时效果很好通过dstring获取我的信息框。
这适用于格式化,但显示过期未定义错误。
function dateFromString(expires) {
var bits = expires.split(/[-T:+]/g);
var d = new Date(bits[0], bits[1]-1, bits[2]);
d.setHours(bits[3], bits[4], bits[5]);
// Get supplied time zone offset in minutes
var offsetMinutes = bits[6] * 60 + Number(bits[7]);
var sign = /\d\d-\d\d:\d\d$/.test(expires)? '-' : '+';
// Apply the sign
offsetMinutes = 0 + (sign == '-'? -1 * offsetMinutes : offsetMinutes);
// Apply offset and local timezone
d.setMinutes(d.getMinutes() - offsetMinutes - d.getTimezoneOffset())
// d is now a local time equivalent to the supplied time
return d;
}
var days = ["Sun","Mon","Tues","Wed","Thur","Fri","Sat"];
var months =['Jan','Feb','March','April','May','June','July','Aug','Sept','Oct','Nov','Dec'];
var ampm = " am";
var dt = (dateFromString(expires));
var yr = dt.getFullYear();
var mth = dt.getMonth(); // months in Javascript are 0-11 so May is month 4
mth = months[mth];
var dte = dt.getDate();
var dy = dt.getDay(); // days are 0-6
dy = days[dy];
var hrs = dt.getHours();
var h1 = hrs;
var mins = dt.getMinutes();
if (hrs >= 12) {ampm = " pm"}
if (hrs >= 13) {hrs = hrs - 12}
if (h1 == 0) {hrs = 12}
if (hrs <10) {hrs = "0" + hrs}; // if leading zero desired
if (mins <10) {mins = "0" + mins};
var dtstring = dy + ", " + mth + " " + dte + ", " + yr + " at " + hrs + ":" + mins + ampm;
现在当我手动输入ISO 8601格式时......
var dt = (dateFromString('2013-05-02T11:08:00-6:00'));
它使用输出var dtstring正确格式化,所以我知道它有效。但它自然地显示了我所有输出数据的当前日期,因此我手动输入了一个日期戳,而不是从已解析的过期XML中定义var。我需要它来格式化我从XML文件解析的expires变量。
这是我被困的地方......
我不能流利使用Javascript,而且我已经研究了这么多,当我使用上面的代码定义expires时,我得到的expires没有定义,但它显然似乎是定义的。我可以直接将它定义到我的信息框中,它很好,但是当我将其定义为格式化时却没有。
我错过了什么或做错了什么?
答案 0 :(得分:0)
以下是将日期格式设置为ISO 8601
的示例您可以使用几种方法来设置日期/时间的格式,下面是关于此类示例的博客。
http://blog.stevenlevithan.com/archives/date-time-format
很难从你的措辞中理解你想要做什么,但这可能会帮助你更进一步。
祝你好运。