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

JavaScript: Difference between toString() and toLocaleString() methods of Date

本文关键字:方法 之间 区别 toLocaleString toString JavaScript Date      更新时间:2023-09-26

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

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

​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)

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

基本上,它将日期格式化为在调用该函数的计算机上的格式,例如美国的"前月",世界其他大部分地区的

"前月"。

编辑:

因为其他人指出上面的引用不一定可靠,所以从 ECMAScript 规范来看,这是怎么

回事:

15.9.5.2 Date.prototype.toString ( )

此函数返回一个字符串值。字符串的内容取决于实现>>,但旨在以方便、人类可读的形式表示当前时区的日期。

15.9.5.5 Date.prototype.toLocaleString ( )

此函数返回一个字符串值。字符串的内容依赖于实现>>,但旨在以方便、人类可读的形式表示当前时区中的日期,该形式对应于主机环境当前区域设置的约定。

由于您可以假设大多数实现将反映规范,因此不同之处在于toString()只需要可读,toLocaleString()应该以应符合用户基于其区域设置的期望的格式进行可读。

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

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

toLocaleString 在转换年份时的行为类似于 toString 操作系统格式不正确。

我刚刚在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)"

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

最终的参考是 ECMAScript 语言规范,其中 Date.prototype.toString 和 Date.prototype.toLocaleString 的行为都是用独立于浏览器的术语来解释的。

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

只是补充一下。 除了日期,它还转换/格式化普通变量。这两个函数都用于格式化/将传递的参数转换为字符串,但参数的格式如何是要看的重点。

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() 将处理这个问题。

希望你会发现它有点帮助和有趣。