javascript时区格式

时间:2011-08-31 14:01:16

标签: javascript timezone

我需要格式化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”。也许我应该用它?我想知道该正则表达式是否适用于符号上下文中的所有时区。

2 个答案:

答案 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字符串格式,因此这可能不是最好的前进道路。