如何使用JavaScript或jQuery解析"dd/mm/yyyy"或"dd-mm-yyyy"或"dd-mmm-yyyy"格式的日期字符串

Sha*_*een 44 javascript asp.net jquery date

可能重复:
扩展JavaScript的Date.parse以允许DD/MM/YYYY(非美国格式的日期)?
将dd-mm-yyyy字符串转换为日期

在文本框中输入日期,例如:05/09/1985,我想将其转换为1985年9月5日(dd-MMM-yyyy)格式.我怎么做到这一点?请注意,源格式可以是dd-mm-yyyydd/mm/yyyydd-mmm-yyyy格式.

代码片段:

 function GetDateFormat(controlName) {
        if ($('#' + controlName).val() != "") {      
            var d1 = Date.parse($('#' + controlName).val());
            if (d1 == null) {
                alert('Date Invalid.');
                $('#' + controlName).val("");
            }
                var array = d1.toString('dd-MMM-yyyy');
                $('#' + controlName).val(array);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这段代码将于1985年5月9日返回,但我希望在1985年9月5日.谢谢.

小智 60

您可能希望使用http://momentjs.com/这样的帮助程序库,它包装了本机javascript日期对象,以便于操作

然后你可以做以下事情:

var day = moment("12-25-1995", "MM-DD-YYYY");
Run Code Online (Sandbox Code Playgroud)

要么

var day = moment("25/12/1995", "DD/MM/YYYY");
Run Code Online (Sandbox Code Playgroud)

然后在日期运作

day.add('days', 7)
Run Code Online (Sandbox Code Playgroud)

并获得原生的javascript日期

day.toDate();
Run Code Online (Sandbox Code Playgroud)


T.J*_*der 46

更新

你刚才说:

对不起,我以前无法预测日期格式,它应该像dd-mm-yyyy或dd/mm/yyyy或dd-mmm-yyyy格式最后我想将所有这些格式转换为dd-MMM-yyyy格式.

完全改变了这个问题.如果你无法控制格式,那将会复杂得多.JavaScript中没有任何内容可以让您指定日期格式.正式来说,JavaScript支持的唯一日期格式是ISO-8601简化版本:yyyy-mm-dd虽然在实践中几乎所有浏览器也都支持yyyy/mm/dd.但除此之外,你必须自己编写代码或(这更有意义)使用一个好的库.我可能会使用像moment.jsDateJS这样的库(虽然DateJS几年没有维护).


原始答案:

如果格式总是如此 dd/mm/yyyy,那么这是微不足道的:

var parts = str.split("/");
var dt = new Date(parseInt(parts[2], 10),
                  parseInt(parts[1], 10) - 1,
                  parseInt(parts[0], 10));
Run Code Online (Sandbox Code Playgroud)

split在给定的分隔符上拆分字符串.然后我们使用parseInt将字符串转换为数字,并使用new Date构造函数Date从这些部分构建:第三部分是年份,第二部分是月份,第一部分是一天.Date使用从零开始的月份数字,因此我们必须从月份数中减去一个.


Jon*_*Jon 10

Date.parse仅识别特定格式,并且您无法告诉它输入格式是什么.在这种情况下,它认为输入是格式mm/dd/yyyy,因此结果是错误的.

为了解决这个问题,你需要或者解析自己的输入(例如用String.split),然后手动构造一个Date对象,或使用功能更齐全的图书馆,如datejs.

手动解析的示例:

var input = $('#' + controlName).val();
var parts = str.split("/");
var d1 = new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0]));
Run Code Online (Sandbox Code Playgroud)

使用date.js的示例:

var input = $('#' + controlName).val();
var d1 = Date.parseExact(input, "d/M/yyyy");
Run Code Online (Sandbox Code Playgroud)