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

Convert Date from one format to another format in JavaScript

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

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

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

的函数

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

我该怎么做呢?


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

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

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


你可以使用下面的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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;
 }


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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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;
}

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