【问题标题】:Convert input type text into date format将输入类型文本转换为日期格式
【发布时间】:2014-04-02 08:28:10
【问题描述】:

我有一种输入类型文本:

 <input type="text" id="policyholder-dob" name="policyholder-dob" />

我想以 mm/dd/yyyy 格式在此字段中输入数字: 比如 2014 年 1 月 1 日 这是我的js代码,但它不起作用,我犯了什么错误?

function dateFormatter(date) {
    var formattedDate = date.getDate() 
        + '/' + (date.getMonth() + 1) + '/' + date.getFullYear();
    return formattedDate;
}

var nextduedate = $("#policyholder-dob").val();

var dateFormatDate = nextduedate.slice(0, 2);
var dateFormatMonth = nextduedate.slice(2, 4);
var dateFormatYear = nextduedate.slice(4, 8);
var totalFormat = dateFormatMonth + '/' + dateFormatDate + '/' + dateFormatYear;
var againNewDate = new Date(totalFormat);
againNewDate.setDate(againNewDate.getDate() + 1);
var todaydate = dateFormatter(againNewDate);

$("#policyholder-dob").prop("value", todaydate);

任何帮助将不胜感激。

【问题讨论】:

标签: javascript jquery date


【解决方案1】:

谢天谢地,您的输入始终采用这种格式:

mm/dd/yyyy

所以可以通过自定义函数将其转换为Date对象,如:

function stringToDate(str){
    var date = str.split("/"),
        m = date[0],
        d = date[1],
        y = date[2],
        temp = [];
    temp.push(y,m,d);
    return (new Date(temp.join("-"))).toUTCString();
}

或者:

function stringToDate(str){
    var date = str.split("/"),
        m = date[0],
        d = date[1],
        y = date[2];
    return (new Date(y + "-" + m + "-" + d)).toUTCString();
}

等等。

调用很简单:

stringToDate("12/27/1963");

它会在 GMT 中返回正确的时间戳(这样您的本地时区就不会影响日期(EST -5,导致它是 26 日)):

Fri, 27 Dec 1963 00:00:00 GMT //Late december

Example

有多种方法可以做到这一点,这是其中之一。

【讨论】:

  • 这不是跨浏览器(ISO8601需要ECMA5),并且由于浏览器对字符串解析的差异而容易出错。
  • @Xotic750 正如我所说,有多种方法可以做到这一点,这就是其中之一。浏览器与字符串解析有什么区别?
  • 这只是给读者的一个说明。只需很少的努力,您就可以制作这个跨浏览器,同时避免字符串解析陷阱。这里有大量关于字符串解析可靠性的 SO 信息,我不打算重复。
【解决方案2】:

我建议 moment.js 进行日期操作。如果你试图将 1 加到一个月,你会遇到一个受伤的世界。当月份是 12 月并且您最终以 13 作为月份时会发生什么。让图书馆为您处理所有这些令人头疼的问题。您可以使用从 val 中提取的字符串创建您的时刻日期。您子字符串或解析。

var d = moment('01/31/2014');                 // creates a date of Jan 31st, 2014
var duration = moment.duration({'days' : 1}); // creates a duration object for 1 day
d.add(duration);                              // add duration to date
alert(d.format('MM/DD/YYYY'));                // alerts 02/01/2014

Here's a fiddle showing it off.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多