使用包含英国格式日期的字符串设置 new Date()

Pau*_*hra 1 javascript jquery cross-browser date-formatting

我希望能够在从字符串创建新日期时输入英国格式的日期,这将适用于所有现代浏览器,但主要是 FireFox 和 IE。

new Date('24/06/2014') // Gives 06/24/2014
Run Code Online (Sandbox Code Playgroud)

因为我想使用它设置一个 jquery datepicker。

是否有可能获得

new Date()
Run Code Online (Sandbox Code Playgroud)

解释作为字符串传递的英国日期?

new Date('24/06/2014').toLocaleString("en-GB") // Gives 06/12/2015

new Date('06/24/2014').toLocaleString("en-GB") // Gives 24/06/2014
Run Code Online (Sandbox Code Playgroud)

真正的问题是当我使用日期选择器时,我指定了英国日期格式,一切都很好......

$("#outOfStockFromDate").datepicker({
    dateFormat: 'dd/mm/yy',
changeMonth: true,
numberOfMonths: 3,
onClose: function (selectedDate) {
    $("#to").datepicker("option", "minDate", selectedDate);
}});
Run Code Online (Sandbox Code Playgroud)

直到我尝试使用这种英国日期格式重新填充日期选择器,例如...

$("#outOfStockFromDate").datepicker("setDate", testDate);
Run Code Online (Sandbox Code Playgroud)

就好像字符串 'testDate' 必须是美国格式... grrr

编辑:我意识到这个问题有两部分,第一部分处理日期选择器;我在尝试 setDate 的同时初始化它是我的愚蠢错误(这个错误使我沿着 Date() 路线走下去)。现在我已经初始化并正确更改它接受英国格式日期!

第二部分是的,javascript 中关于格式化日期的日期功能(现在我知道)是出了名的缺乏......但是当我解决了我最初的问题时,我不关心这个...... PS我最终分裂并重建了美国日期格式(字符串)中的日期,然后使用新日期(USDateFormattedString)......然后我意识到!

所以最后,基本上我的代码在语法上是正确的,但在执行时却不是。

感谢所有回答的人!+1

izs*_*tas 5

您无法new Date直接接受带有英国格式日期的字符串,但是,您可以手动解析它,正如我在另一个具有类似问题的问题中所示

function parseDMY(value) {
    var date = value.split("/");
    var d = parseInt(date[0], 10),
        m = parseInt(date[1], 10),
        y = parseInt(date[2], 10);
    return new Date(y, m - 1, d);
}
Run Code Online (Sandbox Code Playgroud)

这个版本接受这样的日期:

parseDMY("01/13/2014").toLocaleString("en-GB")
"1/1/2015 00:00:00"
Run Code Online (Sandbox Code Playgroud)

如果您想确保不会发生这种情况,您可以添加一些验证。