在 JavaScript 中将日期从一种格式转换为另一种格式

IT技术 javascript date date-format
2021-03-16 02:57:55

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

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

格式动态变化,我将格式作为字符串,但我需要一个像

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

我该怎么做?

4个回答

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

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

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

^mmm/DD/YYYY不是有效格式,您正在寻找:var newDate = moment("Nov/21/2015", "MMM/DD/YYYY").format("MM/DD/YYYY");alert(newDate);
2021-05-06 02:57:55
var newDate = moment("Nov/21/2015", "mmm/DD/YYYY").format("MM/DD/YYYY");alert(newDate); ——这行不通。
2021-05-07 02:57:55

您可以使用 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;
}

您可以使用下面的功能

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

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

所以它不能回答我的问题。我需要一个可以设置当前格式的函数。
2021-04-23 02:57:55
我无法理解如何使用 jquery-dateformat 来满足我的需要。convert 函数如何知道当前的格式是什么?
2021-04-27 02:57:55
JavaScript/或任何第三方库无法知道您的日期字符串的格式,除非您指定它(如果第三方支持)。它将假定它是“mm/dd”格式,即月份出现在日期之前。
2021-05-14 02:57:55