【问题标题】:new Date().toLocaleString not working on firefox新的 Date().toLocaleString 在 Firefox 上不起作用
【发布时间】:2016-03-09 11:46:38
【问题描述】:

在 json 响应中,我以 GMT 格式获取日期,如下所示 2016-03-09T09:55:47.107111 。每当我尝试使用以下代码转换为本地日期/时间格式时:-

new Date('2016-03-09T09:55:47.107111').toLocaleString()

我得到这样的输出:-

"09/03/2016, 15:25:47"   Which is correct 

Mozilla 火狐

"3/9/2016, 9:55:47 AM"  Which is wrong 

new Date('2016-03-09T09:55:47.107111').toLocaleString() 在 Firefox 上不起作用。

【问题讨论】:

  • 你没有告诉Date 转换哪个时区,这意味着 javascript 引擎对此所做的一切都是一团糟:-/
  • @JoachimIsaksson 嗨,但它在 chrome 中运行良好
  • @Rushikeshjogle 在 Chrome 中也不能“正常”工作。没有规范定义应导致您使用的日期字符串的日期。 Chrome 只是碰巧以您认为正确的方式解释它。但是,该行为在旧版或新版 Chrome 中可能有所不同。您应该使用标准日期字符串或正确解析它。
  • 这个问题的主题应该是"toLocaleString on firefox 产生不好的结果"。然后在问题的文本中:“我没有定义应该是什么时区”。瞧,一个自我回答的问题将是!

标签: javascript html angularjs firefox


【解决方案1】:

根据MDN specification of Date,“dateString”可以是符合 IETF 的 RFC 2822 时间戳或 ISO8601 版本。您的日期字符串都不是。我什至不确定字符串末尾的“107111”应该是什么,那么计算机应该如何计算呢?

通常,建议使用格式为“YYYY-MM-DDTHH:mm:ss.sssZ”的日期字符串。

【讨论】:

    【解决方案2】:

    在你写的js文件中

    $scope.date=new Date('2016-03-09T09:55:47.107111');
    

    在你编写的 html 文件中

    {{date | date :'dd/MM/yyyy h:mm:ss'}}
    

    它适用于任何浏览器

    【讨论】:

    【解决方案3】:

    您始终可以通过将本地化传递给 toLocaleString 函数来指定本地化。 例如:

    new Date('2016-03-09T09:55:47.107111').toLocaleString("en-GB");
    

    将导致:

    09/03/2016, 11:55:47
    

    在 Chrome 和 Firefox 中。

    注意:

    new Date('2016-03-09T09:55:47.107111').toLocaleString("en-GB");
    
    new Date('2016-03-09 09:55:47.107111').toLocaleString("en-GB");
    

    会给你不同的时间输出(首先会添加与 UTC 的语言环境差异,第二个不会。

    【讨论】:

    • 这是错误的。在最新版本的 Firefox 和 Chrome 上也不相同(至少在我的时区,但我想知道为什么这会有所不同)也不能转换依赖于浏览器实现的日期对象对第一名。当日期对象不相同时,你可以对它做任何你想做的事情,它仍然不会相同。
    • 绑定到浏览器实现首先确实是错误的,最好使用您自己的格式化程序来选择各个部分,但在所有情况下我都尝试过,除了IE 简单地按原样获取日期而没有时区计算我可以说 moment.js 是一个很好的处理它的库
    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 2014-02-06
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多