Conversia datei dintr-un format în alt format în JavaScript (Programare, Javascript, Data, Format De Dată)

TamarG a intrebat.

Am un șir de date în javascript în formatul #1. Trebuie să o convertesc în formatul #2.

Problema începe atunci când un format este „dd/mm/aa” și celălalt este „mm/dd/aa”.

Formatele se schimbă în mod dinamic și am formatele ca șiruri, dar am nevoie de o funcție de genul

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

Cum aș putea să o fac?

4 răspunsuri
trekforever

Ar trebui să vă uitați în momentjs, , care este o bibliotecă javascript de date/timp. Cu aceasta, puteți converti cu ușurință între date de format diferit. În cazul tău, ar fi:

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

De exemplu, moment("21/10/14", "DD/MM/YY").format("MM/DD/YY") ar returna "10/21/14"

Comentarii

  • var newDate = moment(„Nov/21/2015”, „mmm/DD/AAAA”).format(„MM/DD/AAAA”);alert(newDate); — Acest lucru nu funcționează. –  > Por user3115056.
  • ^ mmm/DD/YYYY nu este un format valid, căutați: var newDate = moment("Nov/21/2015", "MMM/DD/YYYY").format("MM/DD/YYYY");alert(newDate); –  > Por trekforever.
M. Ali

Puteți utiliza răspunsul descris mai sus din momnet.js sau funcția de mai jos pentru împărțirea și utilizarea acestuia

Pentru utilizarea moment.js asigurați-vă că introduceți formatul vechi și cel nou cu majuscule

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

Feng Lin

Se pare că ar trebui să folosiți biblioteca de query-dateformat git hub pentru jquery-dateformat
sau puteți utiliza funcția normală, cum ar fi date-time-formate, , utilizați biblioteca pentru a configura șablonul de formate

Comentarii

  • Nu înțeleg cum să folosesc jquery-dateformat pentru ceea ce am nevoie. Cum știe funcția de conversie care este formatul curent? –  > Por TamarG.
  • JavaScript sau orice altă librărie terță parte nu poate cunoaște formatul șirului de date decât dacă îl specificați (dacă terța parte acceptă acest lucru). Va presupune că este în format „mm/dd”, adică luna apare înainte de zi. –  > Por Amitesh.
  • Deci, nu răspunde la problema mea. Am nevoie de o funcție care să îmi permită să setez formatul curent. –  > Por TamarG.
Osama AbuSitta

Puteți utiliza funcția de mai jos

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