Convert Date from one format to another format in JavaScript

后端 未结 4 1488
说谎
说谎 2020-12-03 18:40

I have a string of a date in javascript in format #1. I need to convert it to format #2.

The problem starts when one format is \"dd/mm/yy\" and the other is \"mm/dd/

相关标签:
4条回答
  • 2020-12-03 18:55

    You can use the function below

    console.log(changeDateFormat('12/1/2020','dd/MM/yyyy','MM/dd/yyyy'));
    
    function changeDateFormat(value, inputFormat, outputFormat) {
    
    let outputSplitter = "/";
    let strOutputFormat = outputFormat.split(outputSplitter).map(i => i.toUpperCase());
    if (strOutputFormat.length != 3) {
      strOutputFormat = outputFormat.split('-');
      outputSplitter = '-';
    }
    
    if (strOutputFormat.length != 3) throw new Error('wrong output format splitter :(');
    
    let date = null;
    
    if (value instanceof Date) {
      date = {
        ["YYYY"]: value.getUTCFullYear(),
        ["MM"]: value.getMonth() + 1,
        ["DD"]: value.getDate()
      }
    }
    
    if (typeof value == 'string') {
      let inputSplitter = "/";
    
      var strInputFormat = inputFormat.split(inputSplitter).map(i => i.toUpperCase());
      if (strInputFormat.length != 3) {
        strInputFormat = inputFormat.split('-');
        inputSplitter = '-';
      }
    
      if (strInputFormat.length != 3) throw new Error('wrong input format splitter :(');
    
      let dateElements = value.split(inputSplitter);
      if (dateElements.length != 3) throw new Error('wrong value :(');
    
      date = {
        [strInputFormat[0]]: dateElements[0],
        [strInputFormat[1]]: dateElements[1],
        [strInputFormat[2]]: dateElements[2],
      }
    }
    
    if (!date) throw new Error('unsupported value type:(');
    
    let result = date[strOutputFormat[0]] + outputSplitter
      + date[strOutputFormat[1]] + outputSplitter 
      + date[strOutputFormat[2]];
    
    return result;
     }
    
    0 讨论(0)
  • 2020-12-03 19:02

    You can use the above described answer of momnet.js or the function below for splitting and using it

    For using moment.js make sure you enter your old and new format in upper case

    function parseDate(strDate) {
    
        var dateFormat = $('#currentDateFormat').val();
    
        var str;
        var res;
    
        var strFormat = dateFormat.split('.');
        if (strFormat.length != 3)
            strFormat = dateFormat.split('/');
        if (strFormat.length != 3)
            strFormat = dateFormat.split('-');
    
        str = strDate.split('.');
        if (str.length != 3)
            str = strDate.split('/');
        if (str.length != 3)
            str = strDate.split('-');
    
    
        if (strFormat[0].substr(0, 1) == 'd' && strFormat[1].substr(0, 1) == 'M' &&             
            strFormat[2].substr(0, 1) == 'y') // for dd MM yyyy
            res = new Date(str[2], str[1], str[0]);
    
        if (strFormat[0].substr(0, 1) == 'M' && strFormat[1].substr(0, 1) == 'd' &&
            strFormat[2].substr(0, 1) == 'y') // for MM dd yyyy
            res = new Date(str[2], str[0], str[1]);
    
        if (strFormat[0].substr(0, 1) == 'y' && strFormat[1].substr(0, 1) == 'M' &&
            strFormat[2].substr(0, 1) == 'd')
            res = new Date(str[0], str[1], str[2]);
    
        if (strFormat[0].substr(0, 1) == 'y' && strFormat[1].substr(0, 1) == 'd' &&         
            strFormat[2].substr(0, 1) == 'M')
            res = new Date(str[0], str[2], str[1]);
    
        return res;
    }
    
    0 讨论(0)
  • 2020-12-03 19:10

    It seems that you should use the library of query-dateformat git hub for jquery-dateformat
    or you can use the normal function like date-time-formate, use the library to config the formate template

    0 讨论(0)
  • 2020-12-03 19:15

    You should look into momentjs, which is a javascript date/time library. With that, you can easily convert between dates of different format. In your case, it would be:

    string newDate = moment(currentDate, currentFormatString).format(newFormatString)

    For example, moment("21/10/14", "DD/MM/YY").format("MM/DD/YY") would return "10/21/14"

    0 讨论(0)
提交回复
热议问题