【问题标题】:Convert Date from one format to another format in JavaScript在 JavaScript 中将日期从一种格式转换为另一种格式
【发布时间】:2014-10-22 05:13:26
【问题描述】:

我有一个格式为 #1 的 javascript 日期字符串。我需要将其转换为格式#2。

当一种格式是“dd/mm/yy”而另一种格式是“mm/dd/yy”时,问题就开始了。

格式动态变化,我将格式作为字符串,但我需要一个类似的函数

   Date newDate = convert(currentDate, currentFormatString, newFormatString).

我该怎么做?

【问题讨论】:

    标签: javascript date date-format


    【解决方案1】:

    您应该查看momentjs,这是一个 javascript 日期/时间库。有了它,您可以轻松地在不同格式的日期之间进行转换。在您的情况下,它将是:

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

    例如,moment("21/10/14", "DD/MM/YY").format("MM/DD/YY") 将返回 "10/21/14"

    【讨论】:

    • var newDate = moment("Nov/21/2015", "mmm/DD/YYYY").format("MM/DD/YYYY");alert(newDate); -- 这不起作用。
    • ^ mmm/DD/YYYY 不是有效格式,您正在寻找:var newDate = moment("Nov/21/2015", "MMM/DD/YYYY").format("MM/DD/YYYY");alert(newDate);
    【解决方案2】:

    您可以使用上述 momnet.js 的答案或下面的函数进行拆分和使用它

    对于使用 moment.js,请确保您以大写形式输入旧格式和新格式

    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;
    }
    

    【讨论】:

      【解决方案3】:

      你可以使用下面的函数

      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;
       }
      

      【讨论】:

        【解决方案4】:

        看来你应该使用query-dateformat的库git hub for jquery-dateformat
        或者你可以使用date-time-formate这样的普通函数,使用库来配置格式模板

        【讨论】:

        • 我不明白如何使用 jquery-dateformat 来满足我的需要。转换函数如何知道当前格式是什么?
        • JavaScript/或任何第三方库无法知道您的日期字符串的格式,除非您指定它(如果第三方支持的话)。它将假定它是“mm/dd”格式,即月份出现在日期之前。
        • 所以它不能回答我的问题。我需要一个可以设置当前格式的函数。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        相关资源
        最近更新 更多