问题是,如果您尝试以编程方式使用该值来创建日期,则该日期无效。
…
我是在做错什么,还是应该以其他方式与javascript日期进行交互?
是的,您做错了。您不应该使用旨在格式化某些内容以实现特定于区域设置的人类显示的功能,并且不要期望输出是机器可解析的。任何的输出的
toLocaleString,
toLocaleDateString或
toLocaleTimeString仅仅是用来人类可读显示。(正如Bergi在评论中澄清的,
toString它也用于人类展示,但是ECMA§15.9.4.2表示应该往返)
您可能会获得LTR标记,因为您的显示语言环境是RTL。除此之外,请考虑语言环境将始终影响输出。也许您的语言环境使用dd / mm / yyyy格式而不是mm
/ dd / yyyy格式。或者您的语言环境要求使用亚洲或阿拉伯字符。在确定显示格式时,所有这些都是考虑因素,但从不适合机器解析。
还应考虑ECMAscript规范没有为这些方法的输出定义任何特定的格式规则,并且不同的浏览器将产生不同的结果。
如果意图不是要显示给用户,则应改用以下功能之一:
toISOString
将为您提供ISO8601 / RFC3339格式的时间戳toGMTString
或toUTCString
将为您提供RFC822 / RFC1123格式的时间戳getTime
将为您提供整数毫秒级的Unix时间戳
以上所有都将返回基于UTC的值。如果你想在本地时间,你可以建立自己的字符串与各种存取功能(
getFullYear,
getMonth,等…),或者你可以使用库如moment.js:
这使用moment.js返回ISO8601格式的本地时间+与日期的偏移量:
moment(theDate).format() // ex: "2014-08-14T13:32:21-07:00"



