【问题标题】:how to parse a "dd/mm/yyyy" or "dd-mm-yyyy" or "dd-mmm-yyyy" formatted date string using JavaScript or jQuery [duplicate]如何使用 JavaScript 或 jQuery 解析 \"dd/mm/yyyy\" 或 \"dd-mm-yyyy\" 或 \"dd-mmm-yyyy\" 格式的日期字符串 [重复]
【发布时间】:2016-09-23 23:44:35
【问题描述】:

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

在文本框中输入日期,例如:1985 年 5 月 9 日,我想把它转换成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);
        }
    }

此代码返回1985 年 5 月 9 日但我想要1985 年 9 月 5 日.谢谢。

    标签: javascript jquery asp.net date


    【解决方案1】:

    您可能想要使用像 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();
    

    【讨论】:

    • 由于我的项目中的安全问题,无法使用时刻。我认为分裂是我唯一的选择。
    【解决方案2】:

    更新

    下面你说:

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

    【讨论】:

    • 抱歉,我之前无法预测日期格式,它应该是 dd-mm-yyyy 或 dd/mm/yyyy 或 dd-mmm-yyyy 格式最后我想将所有这些格式转换为 dd-MMM-yyyy 格式。
    • @SharanammaJekeen:那个完全地改变问题。见更新。
    • 我会将我的源格式修复为 dd/mm/yyyy 格式。
    【解决方案3】:

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

    要解决此问题,您需要自己解析输入(例如使用String.split)然后解析manually construct 一个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");
    

    【讨论】:

    • 那么我怎样才能实现上述格式?
    • @SharanammaJekeen:我不确定你的意思......
    • 通过以mm/dd/yyyy 格式与new Date(`${parts[1]}/${parts[0]}/${parts[2]}`) 连接,也可能更容易重建日期
    【解决方案4】:

    尝试这个:

     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 的用法很好。
    【解决方案5】:

    看到这个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
    

    【讨论】:

    • 请添加评论 - 投票以便至少我可以知道我的错误
    • 我猜,这是因为 OP 询问如何将传入的日期解析为“dd/mm/yyyy”形式,而您的回答似乎是关于您如何格式化当前日期 - 也许?
    • 很好...如果您提到的观点是否决票的原因...我给出了通用日期转换,以便于理解。好的,在给出答案之前会记住这些事情。谢谢(你的)信息。
    猜你喜欢
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多