Date(字符串)使用toLocaleString显示不同的日期和时间

时间:2017-09-20 15:15:01

标签: javascript date

我希望将字符串1822-01-01 00:00:00转换为日期:

var d= new Date("1822-01-01 00:00:00");

我期望d.toLocaleString()使用的是1.1.1822, 00:00:00,但我得到的是31.12.1821, 23:53:28

请参阅小提琴:https://jsfiddle.net/f1kLpfgd/

Javascript Date string constructing wrong date解释了时区错误的日期。我有一个不同的问题,因为甚至分钟和秒都与我的输入不同。使用new Date(1822, 0, 1, 0, 0, 0, 0)构造函数的解决方案对我不起作用,因为结果为31.12.1821, 23:53:28

是因为这一年是在1901年之前吗?但即使是1899年也能完美地运作......

更新

对于自定义VS toLocaleString的格式化示例,请参阅更新的小提琴:https://jsfiddle.net/f1kLpfgd/8/

2 个答案:

答案 0 :(得分:1)

如果您不想使用某些库,例如date-fnsmoment.js ...
为了获得所需,您可以尝试:

var dateString = "1822-01-01 00:00:00";

var d = new Date(dateString);
var formatted = d.getDate() +'.'+
                (d.getMonth()+1) +'.'+
                d.getFullYear() +', '+
                dateString.substr(11);

console.log(formatted);

答案 1 :(得分:1)

  

我想将字符串1822-01-01 00:00:00转换为日期:

var d= new Date("1822-01-01 00:00:00");
     

我期望使用d.toLocaleString()的是1.1.1822,00:00:00,但我得到的是31.12.1821,23:53:28。

不要将内置解析器用于非标准字符串,因为您获得的任何内容都是依赖于实现的,并且可能不是您在至少某些主机中所期望的。在Safari中, d 将是无效日期。

toLocaleString 返回的格式取决于实现,因浏览器而异。对我来说,new Date().toLocaleString()返回“9/21/2017,上午9:48:49”,这与我所在地区或我所说语言的用户通常使用的格式不一致。

如果您只想重新格式化字符串,请参阅Reformat string containing date with Javascript

如果您想知道如何正确解析字符串,请参阅Why does Date.parse give incorrect results?

如果您想格式化日期,请参阅Where can I find documentation on formatting a date in JavaScript?