66

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

在文本框中输入日期,例如:05/09/1985,我想将其转换为05-Sep-1985 (dd-MMM-yyyy) 格式。我将如何实现这一目标?请注意,源格式可能是dd-mm-yyyyor dd/mm/yyyyordd-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。谢谢。

4

5 回答 5

76

您可能希望使用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();
于 2012-05-03T12:35:19.973 回答
68

更新

下面你说:

抱歉,我之前无法预测日期格式,它应该是 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));

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

于 2012-05-03T11:25:38.273 回答
14

Date.parse仅识别特定格式,您无法选择告诉它您的输入格式是什么。在这种情况下,它认为输入是 format 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]));

使用 date.js 的示例:

var input = $('#' + controlName).val();
var d1 = Date.parseExact(input, "d/M/yyyy");
于 2012-05-03T11:25:44.857 回答
3

Try this:

 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);
        }
    }

The RegExp replace .replace(/([0-9]+)\/([0-9]+)/,'$2/$1') change day/month position.

于 2012-05-03T11:29:11.377 回答
-6

请参阅此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
于 2012-05-03T11:31:43.233 回答