1

我对 javascript 比较陌生,所以这可能是一个非常简单的问题。在使用 toLocaleString 返回的日期之后,是否有一种简单的方法可以阻止“EDT”打印?谢谢!

4

4 回答 4

5

无法确定toLocaleString会返回什么;你当然不能保证EDT会出现在每台运行它的机器上,更不用说任何时区指示了。

来自 Mozilla 的开发者网络:

toLocaleString方法依赖于格式化日期的底层操作系统。它使用运行脚本的操作系统的格式约定将日期转换为字符串。例如,在美国,月份出现在日期之前 (04/15/98),而在德国,日期出现在月份之前 (15.04.98)。如果操作系统不符合 2000 年,并且在 1900 年之前或 2000 年以上的年份不使用全年,则 toLocaleString 返回一个不符合 2000 年的字符串。在转换操作系统格式不正确的年份时,toLocaleString 的行为类似于 toString。

一种可能的解决方法是使用toLocaleDateStringand构造自定义日期字符串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方法,请查看DateMDN。

于 2011-06-14T19:37:41.737 回答
2

据我所知,无论如何,在 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

于 2011-06-14T19:28:35.097 回答
0
var dateWithoutTimeZone = function() {
  return new Date().toLocaleString().replace(/\s*\(?EDT\)?/, '');
};
dateWithoutTimeZone(); // => "Tue Jun 14 2011 2:58:04 GMT-0400"
于 2011-06-14T18:58:08.103 回答
0

时区总是在字符串的末尾吗?(当我尝试时,时区根本没有出现。)

如果是,则可以使用slice 方法去除字符串的最后四个字符(空格 + 3 个字符的时区)。

document.write(mydate.toLocaleString().slice(0,-4));
于 2011-06-14T19:06:40.907 回答