我需要格式化javascript日期以通过json发送到服务器。服务器期望时间采用根据此示例的格式
2011-08-31T06:49:28.931 -0700
当我尝试提交类似
的内容时,它会方便地告诉我 2011-08-31T06:49:28.931 -07:00
我遇到的问题是时区部分-0700
。我一直在看Date API,并没有看到指定时区格式的方法。我可以做d.getTimezoneOffset
,但它会为我返回240(我想在EDT中)。
所以,我可以将240转换为0400代表4小时。我担心其他时区的正确性。我的问题是
1)如何将getTimezoneOffset()
的结果转换为所需的格式,以及如何确定标志应该是什么(这就是我担心的部分)?
2)有没有办法从日期对象本身获取格式,所以我不需要做任何自定义的事情?如果我d.toString()
我得到"Wed Aug 31 2011 09:48:27 GMT-0400 (EDT)"
,那么这里的时区部分是我想要的格式。所以它可能是可能的。也许最好的解决方案是使用正则表达式从d.toString()
...
3)额外信用:服务器需要某种标准的格式吗?
更新:使用match(/^.*GMT(-?\d*)/)
在数组的索引1处返回“-0400”。也许我应该用它?我想知道该正则表达式是否适用于符号上下文中的所有时区。
答案 0 :(得分:1)
试试这段代码:
var d=new Date(Date.now()); // sets your date to variable d
function repeat(str,count) { // EXTENSION
return new Array(count+1).join(str);
};
function padLeft(str,length,char) { // EXTENSION
return length<=str.length ? str.substr(0,length) : repeat(String(char||" ").substr(0,1),length-str.length)+str;
};
var str=padLeft(String(d.getFullYear()),4,"0")+"-"+
padLeft(String(d.getMonth()),2,"0")+"-"+
padLeft(String(d.getDate()),2,"0")+"T"+
padLeft(String(d.getHours()),2,"0")+":"+
padLeft(String(d.getMinutes()),2,"0")+":"+
padLeft(String(d.getSeconds()),2,"0")+"."+
d.getMilliseconds();
//str+=" GMT";
var o=d.getTimezoneOffset(),s=o<0?"+":"-",h,m;
h=Math.floor(Math.abs(o)/60);
m=Math.abs(o)-h*60;
str+=" "+s+padLeft(String(h),2,"0")+padLeft(String(m),2,"0");
alert(str);
答案 1 :(得分:0)
您可能希望使用其中一个日期/时间格式库来支持此时区格式(例如http://jacwright.com/projects/javascript/date_format/)。无论如何,你是对的:确实没有好的方法来控制格式输出。
就正则表达式而言,我不知道所有浏览器都一直使用GMT字符串格式,因此这可能不是最好的前进道路。