【问题标题】:JavaScript: Difference between toString() and toLocaleString() methods of DateJavaScript:日期的 toString() 和 toLocaleString() 方法之间的区别
【发布时间】:2012-08-14 03:10:46
【问题描述】:

我无法理解 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)

【问题讨论】:

    标签: javascript date


    【解决方案1】:

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

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

    编辑:

    由于其他人指出上述参考资料不一定可靠,ECMAScript spec的这个是怎么回事:

    15.9.5.2 Date.prototype.toString ( )

    此函数返回一个字符串值。 String 的内容是 implementation->> 相关的,但旨在以方便、人类可读的形式表示当前时区中的 Date。

    15.9.5.5 Date.prototype.toLocaleString ( )

    此函数返回一个字符串值。字符串的内容与实现相关,但旨在以一种方便的、人类可读的形式表示当前时区中的日期,该形式与宿主环境当前语言环境的约定相对应。

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

    【讨论】:

    • 是的,但有什么区别?
    • from developer.mozilla.org/en-US/docs/JavaScript/Reference/… - toString 总是返回美式英语日期的字符串表示形式。
    • 我更改了系统上的本地化设置,然后进行了测试。现在区别很明显了。谢谢!
    • @phenomnomnominal — 这可能是 Mozilla 所做的,但不一定是其他浏览器所做的。
    • 在调用date.toLocaleString() 时,并非所有浏览器都尊重区域设置。我对此进行了测试:Chrome 和 Safari 始终使用美国语言环境设置,而 IE、Opera 和 Firefox 正确使用我的计算机语言环境设置(在我的情况下为挪威语)。
    【解决方案2】:

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

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

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

    【讨论】:

    • 是的,但有什么区别?
    • 一个是操作系统特定的。另一个不是
    • 是的,谢谢@phenomnomnominal 向我清除。我也为你的答案投票:-)
    • MDN 不是 ECMAScript 的规范,它只是 JavaScript(即 Mozilla 的 ECMAScript 实现)的参考,因此不适用于使用不同脚本引擎的浏览器。
    • ecma-international.org/ecma-262/5.1/#sec-15.2.4.3。该规范并没有真正提供“其他浏览器做什么”的实现细节
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      • 嗯,所以我的问题是有效的 :-) 确切的区别和浏览器行为存在混淆
      • @MuhammadAhmadZafar——是的,一个有效的问题。底线是,虽然大多数浏览器似乎为 toString 返回以美国为中心的日期格式,但这完全取决于开发人员,并且可能会发生变化,因为大多数浏览器用户不使用美国日期格式正常。此外,即使考虑到区域设置,有些人可能会在 2012 年 8 月 10 日返回,而其他人可能会在 2012 年 8 月 10 日返回。
      【解决方案5】:

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

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

      希望您会觉得它有些帮助和有趣。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-19
        • 2012-04-24
        • 2011-03-08
        • 2011-07-25
        • 2019-04-27
        • 1970-01-01
        • 2014-01-08
        • 2011-01-07
        相关资源
        最近更新 更多