首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用toLocaleString()从通过javascript返回的日期中删除'EDT‘的最佳方法

使用toLocaleString()从通过javascript返回的日期中删除'EDT‘的最佳方法
EN

Stack Overflow用户
提问于 2011-06-15 02:45:19
回答 4查看 7.4K关注 0票数 1

我对javascript比较陌生,所以这可能是一个非常简单的问题。有没有一种简单的方法可以在toLocaleString返回日期后停止打印'EDT‘?谢谢!

EN

回答 4

Stack Overflow用户

发布于 2011-06-15 03:37:42

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

来自Mozilla的开发者网络:

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

一种可能的解决方法是使用toLocaleDateStringtoLocaleTimeString构造一个自定义日期字符串。

代码语言:javascript
复制
// Something to this effect:
var d = new Date();
console.log(d.toLocaleDateString() + " " + d.toLocaleTimeString());

这通常不会在其输出中包括时区,但即使这样也不是很完美,因为您无法知道输出的确切格式。

因此,最好的解决方案是使用自定义的日期格式化函数:

代码语言:javascript
复制
// 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

票数 5
EN

Stack Overflow用户

发布于 2011-06-15 03:28:35

据我所知,在windows上,没有浏览器从toLocaleString返回'EDT‘,只有Chrome返回时区。

其他平台可能会以不同的方式分配字符串。

我更大的抱怨是Chrome使用本地时间的24小时时钟。

//测试new Date().toLocaleString() (windows 7)

2011年6月14日星期二15:13:43

  • Chrome
  • 5.0>> 9.0.597.98>>
  • Opera 11.01>> 6/ 14 /2011 3:15:37 PM
  • 火狐4.0.1>> 2011年6月14日星期二下午3:16:33 PM
  • MSIE 8.0>>星期二,2011年6月14日下午3:16:06 PM
  • MSIE 9.0>>星期二,2011年6月14日3:17:09 PM

它们都返回组中的小时:分钟:秒,因此要排除该时间之后的任何内容,您可以:

代码语言:javascript
复制
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上的时区-但您的里程可能会有所不同。

代码语言:javascript
复制
var D=new Date();
D.toLocaleDateString()+' '+D.toLocaleTimeString()

returns,6月14,2011 15:44:35

票数 2
EN

Stack Overflow用户

发布于 2011-06-15 02:58:08

代码语言:javascript
复制
var dateWithoutTimeZone = function() {
  return new Date().toLocaleString().replace(/\s*\(?EDT\)?/, '');
};
dateWithoutTimeZone(); // => "Tue Jun 14 2011 2:58:04 GMT-0400"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6348431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档