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

IT技术 javascript jquery asp.net date
2021-01-21 08:45:05

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

在文本框中输入日期,例如: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个回答

您可能想要使用像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();
由于我的项目中的安全问题,无法使用 moment。我认为分裂是我唯一的选择。
2021-03-30 08:45:05

更新

你在下面说过:

抱歉,我之前无法预测日期格式,它应该是 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使用从零开始的月份数字,因此我们必须从月份数字中减去一。

抱歉,我之前无法预测日期格式,它应该是 dd-mm-yyyy 或 dd/mm/yyyy 或 dd-mmm-yyyy 格式,最后我想将所有这些格式转换为 dd-MMM-yyyy 格式。
2021-03-12 08:45:05
@SharanammaJekeen:这完全改变了问题。见更新。
2021-03-18 08:45:05
我会将我的源格式修复为 dd/mm/yyyy 格式。
2021-03-25 08:45:05

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

使用 date.js 的示例:

var input = $('#' + controlName).val();
var d1 = Date.parseExact(input, "d/M/yyyy");
那么我怎样才能实现上述格式呢?
2021-03-14 08:45:05
通过将mm/dd/yyyy格式与new Date(`${parts[1]}/${parts[0]}/${parts[2]}`)
2021-03-20 08:45:05
@SharanammaJekeen:我不确定你的意思......
2021-04-10 08:45:05

试试这个:

 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')更改日/月位置。

很好的用法RegEx
2021-03-30 08:45:05

看到这个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
请添加评论 - 投票,以便至少我可以知道我的错误
2021-03-12 08:45:05
很好......如果你提到的这一点是否决票的原因......我给出了通用日期转换,以便它易于理解。好的,在给出答案之前会记住这些事情。谢谢(你的)信息。
2021-03-26 08:45:05
我想,这是因为 OP 询问如何将传入的日期解析为“dd/mm/yyyy”形式,而您的回答似乎是关于您如何格式化当前日期 - 也许?
2021-04-04 08:45:05