我对javascript比较陌生,所以这可能是一个非常简单的问题。有没有一种简单的方法可以在toLocaleString返回日期后停止打印'EDT‘?谢谢!
发布于 2011-06-15 03:37:42
没有办法确定toLocaleString将返回什么;您当然不能保证EDT会出现在运行它的每台机器上,更不用说任何时区的指示了。
来自Mozilla的开发者网络:
toLocaleString方法在设置日期格式时依赖于基础操作系统。它使用运行脚本的操作系统的格式约定将日期转换为字符串。例如,在美国,月份出现在日期(04/15/98)之前,而在德国,日期出现在月份(15.04.98)之前。如果操作系统与2000年不兼容,并且1900年之前或2000年以上的年份不使用全年,则toLocaleString将返回一个与2000年不兼容的字符串。在转换操作系统未正确格式化的年份时,toLocaleString的行为类似于toString。
一种可能的解决方法是使用toLocaleDateString和toLocaleTimeString构造一个自定义日期字符串。
// Something to this effect:
var d = new Date();
console.log(d.toLocaleDateString() + " " + d.toLocaleTimeString());这通常不会在其输出中包括时区,但即使这样也不是很完美,因为您无法知道输出的确切格式。
因此,最好的解决方案是使用自定义的日期格式化函数:
// Add leading-zeros to numbers less than 10[000...]
function padZ(num, n) {
n = n || 1; // Default assume 10^1
return num < Math.pow(10, n) ? "0" + num : num;
}
function formattedDate(d) {
var day = d.getDate();
var month = d.getMonth() + 1; // Note the `+ 1` -- months start at zero.
var year = d.getFullYear();
var hour = d.getHours();
var min = d.getMinutes();
var sec = d.getSeconds();
return month+"/"+day+"/"+year+" "+hour+":"+padZ(min)+":"+padZ(sec);
}要深入了解可用的Date方法,请查看MDN上的Date。
发布于 2011-06-15 03:28:35
据我所知,在windows上,没有浏览器从toLocaleString返回'EDT‘,只有Chrome返回时区。
其他平台可能会以不同的方式分配字符串。
我更大的抱怨是Chrome使用本地时间的24小时时钟。
//测试new Date().toLocaleString() (windows 7)
2011年6月14日星期二15:13:43
它们都返回组中的小时:分钟:秒,因此要排除该时间之后的任何内容,您可以:
var d=new Date().toLocaleString();
var s= d.toLocaleString().match(/^[^:]+(:\d\d){2} *(am|pm)\b/i)[0];
returned value: (Chrome)
Tue Jun 14 2011 15:26:11:11另一种方法是连接locale日期和时间字符串,令人惊讶的是,它不会返回chrome上的时区-但您的里程可能会有所不同。
var D=new Date();
D.toLocaleDateString()+' '+D.toLocaleTimeString()returns,6月14,2011 15:44:35
发布于 2011-06-15 02:58:08
var dateWithoutTimeZone = function() {
return new Date().toLocaleString().replace(/\s*\(?EDT\)?/, '');
};
dateWithoutTimeZone(); // => "Tue Jun 14 2011 2:58:04 GMT-0400"https://stackoverflow.com/questions/6348431
复制相似问题