可能重复:
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-yyyy
或dd/mm/yyyy
或dd-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 。感谢。
答案 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-8601:yyyy-mm-dd
,但实际上几乎所有浏览器也支持yyyy/mm/dd
。但除此之外,你必须自己编写代码或(这更有意义)使用一个好的库。我可能会使用像moment.js或DateJS这样的库(尽管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