JavaScript:Date的toString()和toLocaleString()方法之间的区别

时间:2012-08-14 03:10:47

标签: javascript date

我无法理解JavaScript中toString()对象的toLocaleString()Date方法之间的区别。我知道的一件事是,只要toString()对象需要转换为字符串,就会自动调用Date

以下代码始终返回相同的结果:

​var d = new Date();
document.write( d + "<br />" );
document.write( d.toString() + "<br />" );
document.write( d.toLocaleString() );

输出是:

Tue Aug 14 2012 08:08:54 GMT+0500 (PKT)
Tue Aug 14 2012 08:08:54 GMT+0500 (PKT)
Tue Aug 14 2012 08:08:54 GMT+0500 (PKT)

5 个答案:

答案 0 :(得分:14)

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleString

基本上,它将Date格式化为在调用函数的计算机上如何格式化,例如在美国的前一天,在世界其他大部分地区的前一天。

修改

因为其他一些人指出上述参考文献不是必要可靠的,所以ECMAScript spec

是怎么回事?
  

<强> 15.9.5.2 Date.prototype.toString ( )

     
    

此函数返回String值。字符串的内容是implementation-&gt;&gt;依赖,但旨在以方便,人类可读的形式表示当前时区中的日期。

  
     

<强> 15.9.5.5 Date.prototype.toLocaleString ( )

     
    

此函数返回String值。字符串的内容是implementation-&gt;&gt;依赖,但旨在以方便的,人类可读的形式表示当前时区中的Date,该形式对应于主机环境当前语言环境的约定。

  

由于您可以假设大多数实现都会反映规范,不同之处在于toString()只需要可读,toLocaleString()应该以符合用户期望的格式读取根据他们的地区。

答案 1 :(得分:5)

  

使用操作系统的区域设置将日期转换为字符串   约定。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleString

  转换一年时,

toLocaleString的行为与toString类似   操作系统格式不正确。

答案 2 :(得分:2)

我刚刚在Chrome的控制台中检查了日期,发现了演示文稿格式的差异。希望这可以提供帮助。

var d = new Date();

console.log(d.toLocaleString()); //"04.09.2016, 15:42:44"
console.log(d.toString());       //"Sun Sep 04 2016 15:42:44 GMT+0300 (FLE Daylight Time)"

答案 3 :(得分:1)

很多参考文献,但没有一篇是权威性的。请注意,Mozilla的文档适用于JavaScript,它是针对浏览器的ECMAScript版本。其他浏览器使用其他实现,因此,虽然MDN文档很有用,但它不具有权威性(它也是社区维基,因此甚至不是官方的Mozilla文档),也不一定适用于其他浏览器。

最终参考是ECMAScript语言规范,其中Date.prototype.toStringDate.prototype.toLocaleString的行为以浏览器独立的术语解释。

值得注意的是两种方法,字符串依赖于实现,这意味着不同的浏览器将返回不同的字符串。

答案 4 :(得分:0)

只需添加。除日期外,它还转换/格式化普通变量。 这两个函数都用于将传递的参数格式化/转换为字符串,但是如何格式化参数才是重点。

toLocalestring()用于返回格式化的字符串,具体取决于调用函数的地理位置。

为简单起见。 举这个例子。 它显示 toString()不会格式化,但是 toLocaleSting()将如何格式化(基于地理位置的设置)。

let number = 1100;
console.log(number.toString()); // "1100"
console.log(number.toLocaleString())  // 1,100

let number = 1100;
console.log(number.toString());
console.log(number.toLocaleString());

对于程序员来说,避免编写额外的函数来格式化字符串或日期很有用。 toLocaleString()将解决此问题。

希望您会发现它有所帮助且有趣。