我对 javascript 比较陌生,所以这可能是一个非常简单的问题。在使用 toLocaleString 返回的日期之后,是否有一种简单的方法可以阻止“EDT”打印?谢谢!
4 回答
无法确定toLocaleString
会返回什么;你当然不能保证EDT
会出现在每台运行它的机器上,更不用说任何时区指示了。
来自 Mozilla 的开发者网络:
该
toLocaleString
方法依赖于格式化日期的底层操作系统。它使用运行脚本的操作系统的格式约定将日期转换为字符串。例如,在美国,月份出现在日期之前 (04/15/98),而在德国,日期出现在月份之前 (15.04.98)。如果操作系统不符合 2000 年,并且在 1900 年之前或 2000 年以上的年份不使用全年,则 toLocaleString 返回一个不符合 2000 年的字符串。在转换操作系统格式不正确的年份时,toLocaleString 的行为类似于 toString。
一种可能的解决方法是使用toLocaleDateString
and构造自定义日期字符串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
方法,请查看Date
MDN。
据我所知,无论如何,在 Windows 上,没有浏览器从 toLocaleString 返回“EDT”,而且只有 Chrome 完全返回时区。
其他平台可能会以不同的方式分配字符串。
我更大的不满是 Chrome 使用 24 小时制本地时间。
// 测试 new Date().toLocaleString() (windows 7)
- Safari 5.0>> 2011 年 6 月 14 日星期二 15:13:43
- Chrome 9.0.597.98>> 2011 年 6 月 14 日星期二 15:15:01 GMT-0400(东部夏令时间)
- 歌剧 11.01>> 2011 年 6 月 14 日下午 3:15:37
- Firefox 4.0.1>> 2011 年 6 月 14 日星期二下午 3:16:33
- MSIE 8.0>> 2011 年 6 月 14 日星期二下午 3:16:06
- MSIE 9.0>> 2011 年 6 月 14 日,星期二,下午 3:17:09
他们都返回组中的小时:分钟:秒,因此在您可以排除时间之后的任何内容:
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
另一种方法是连接区域设置日期和时间字符串,令人惊讶的是,它不会在 chrome 上返回时区,但您的里程可能会有所不同。
var D=new Date();
D.toLocaleDateString()+' '+D.toLocaleTimeString()
在 Chrome 中返回 2011 年 6 月 14 日星期二 15:44:35
var dateWithoutTimeZone = function() {
return new Date().toLocaleString().replace(/\s*\(?EDT\)?/, '');
};
dateWithoutTimeZone(); // => "Tue Jun 14 2011 2:58:04 GMT-0400"
时区总是在字符串的末尾吗?(当我尝试时,时区根本没有出现。)
如果是,则可以使用slice 方法去除字符串的最后四个字符(空格 + 3 个字符的时区)。
document.write(mydate.toLocaleString().slice(0,-4));