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

时间:2012-05-03 11:21:49

标签: javascript jquery asp.net date

  

可能重复:
  Extending JavaScript's Date.parse to allow for DD/MM/YYYY (non-US formatted dates)?
  Convert dd-mm-yyyy string to date

在文本框中输入日期,例如: 05/09/1985 ,我想将其转换为 05-Sep-1985 (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);
        }
    }

此代码返回 09-May-1985 ,但我想 05-Sep-1985 。感谢。

5 个答案:

答案 0 :(得分:57)

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

然后你可以做以下事情:

var day = moment("12-25-1995", "MM-DD-YYYY");

var day = moment("25/12/1995", "DD/MM/YYYY");

然后按日期运作

day.add('days', 7)

并获取原生javascript日期

day.toDate();

答案 1 :(得分:41)

<强>更新

下面你说过:

  

抱歉,我之前无法预测日期格式,它应该像dd-mm-yyyy或dd / mm / yyyy或dd-mmm-yyyy格式最后我想将所有这些格式转换为dd-MMM-yyyy格式。

完全 会更改问题。如果你无法控制格式,那将会复杂得多。 JavaScript中没有任何内容可以让您指定日期格式。正式来说,JavaScript支持的唯一日期格式是simplified version of ISO-8601yyyy-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));

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

答案 2 :(得分:8)

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

要解决此问题,您需要自己解析输入(例如使用String.split),然后manually construct Date对象,或使用功能更全面的库,例如{ {3}}

手动解析的示例:

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

使用date.js的示例:

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

答案 3 :(得分:3)

试试这个:

 function GetDateFormat(controlName) {
        if ($('#' + controlName).val() != "") {      
            var d1 = Date.parse($('#' + controlName).val().toString().replace(/([0-9]+)\/([0-9]+)/,'$2/$1'));
            if (d1 == null) {
                alert('Date Invalid.');
                $('#' + controlName).val("");
            }
                var array = d1.toString('dd-MMM-yyyy');
                $('#' + controlName).val(array);
        }
    }

RegExp取代.replace(/([0-9]+)\/([0-9]+)/,'$2/$1')更改日/月位置。

答案 4 :(得分:-1)

请参阅此http://blog.stevenlevithan.com/archives/date-time-format

你可以用日期做任何事情。

档案:http://stevenlevithan.com/assets/misc/date.format.js

使用脚本标记将其添加到您的html代码中并使用它可以将其用作:

var now = new Date();

now.format("m/dd/yy");
// Returns, e.g., 6/09/07