我希望将字符串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/
答案 0 :(得分:1)
如果您不想使用某些库,例如date-fns,moment.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?