Modifier le format de certaines chaînes

voix
1

J'ai des chaînes dans ce format:

Puntata del 16 Agosto 2018
Puntata del 17 Gennaio 2018
Puntata del 7 Novembre 2017
Puntata del 2 Gennaio 2013

Je voudrais obtenir:

20180816
20180117
20171107
20130102

Comment puis je faire ça?

C'est l'année, le mois (deux chiffres) et le jour (deux chiffres).

Pour l'année, il est facile: il suffit de prendre les quatre derniers caractères de la chaîne, mais pour le jour et le mois?

Voici le code que je crée:

var newName = function(oldName) {
    var oldNameWithoutPuntata = oldName.substring(12);
    console.log('oldNameWithoutPuntata:', oldNameWithoutPuntata);

    var year = oldNameWithoutPuntata.substr(oldNameWithoutPuntata.length - 4);
    console.log('year:', year);

    // ...
    return year + month + day;
}

var test1 = 'Puntata del 16 Agosto 2018';
var test2 = 'Puntata del 17 Gennaio 2018';
var test3 = 'Puntata del 7 Novembre 2017';
var test4 = 'Puntata del 2 Gennaio 2013';
console.log(test1, '-->', newName(test1));
console.log(test2, '-->', newName(test2));
console.log(test3, '-->', newName(test3));
console.log(test4, '-->', newName(test4));
Créé 19/09/2018 à 13:35
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
1

Il est possible d'enlever une partie du découpage en tranches substring si vous utilisez la RegExpfonction execqui peut renvoyer des groupes de correspondance d'une requête , bien que le premier élément sera le « match entier ».

Une fois que vous avez un tableau des pièces de date, la réduisant en une chaîne dans l' ordre inverse est obtenue par la reduceRightfonction de tableau.

S'il vous plaît noter que padStart est une fonction de chaîne de sorte que vous devez convertir les nombres en chaînes d' abord. Ceci est réalisé en les enchaînant avec une chaîne vide -à- dire ('' + <number>).padStart(...)et je fais usage de supports pour assurer l'ordre d'exécution correcte de la déclaration

let getMonthAsNumber = month => ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'].indexOf(month)+1

var newName = oldName => /^Puntata del ([0-9]+)\s([^0-9\s]+)\s([0-9]+)$/gi.exec(oldName)
  // remove the first element of the match array - this is the whole match
  .slice(1)
  // use reduceRight to work along the rest of the match groups 'backwards'
  // apend the strings together and convert/pad as required
  .reduceRight((prev, cur) => prev + (''+(isNaN(cur)? // is 'cur' a string?
  getMonthAsNumber(cur) // yes - convert month to number
  : 
  cur // no - return number
  ))
  .padStart(2, '0'), '')

var test1 = 'Puntata del 16 Agosto 2018';
var test2 = 'Puntata del 17 Gennaio 2018';
var test3 = 'Puntata del 7 Novembre 2017';
var test4 = 'Puntata del 2 Gennaio 2013';
console.log(test1, '-->', newName(test1));
console.log(test2, '-->', newName(test2));
console.log(test3, '-->', newName(test3));
console.log(test4, '-->', newName(test4));

Créé 19/09/2018 à 18:02
source utilisateur

voix
1

Pour obtenir le résultat escompté, utilisez ci-dessous l'option de trouver la valeur de mois de tableau les noms de mois

  1. Utilisez mois Array pour trouver la valeur du mois et le format pour ajouter « 0 », si elle est inférieure à 10
  2. En utilisant la méthode split ( » « ) avec l'espace, la date peut en jour fente, mois, année
  3. mois Format pour ajouter « 0 », si elle est inférieure à 10

codepen pour référence - https://codepen.io/nagasai/pen/QVzqPZ?editors=1011

var newName = function(oldName) {
  var oldNameWithoutPuntata = oldName.substring(12);
  
  var months = ['Gennaio','Febbraio','Marzo', 'Aprile','Maggio','Giugno', 'Luglio', 'Agosto','Settembre', 'Ottobre', 'Novembre','Dicembre']
  
  var dateArr = oldNameWithoutPuntata.split(' ')
  
  var month = months.indexOf(dateArr[1]) + 1 
  month = month< 10 ? ('0' + month) : month
  var year = dateArr[2];
  var date = dateArr[0]
  date = date< 10 ? ('0' + date) : date
 
  return year + month + date;
}

var test1 = 'Puntata del 16 Agosto 2018';
var test2 = 'Puntata del 17 Gennaio 2018';
var test3 = 'Puntata del 7 Novembre 2017';
var test4 = 'Puntata del 2 Gennaio 2013';
console.log(test1, '-->', newName(test1));
console.log(test2, '-->', newName(test2));
console.log(test3, '-->', newName(test3));
console.log(test4, '-->', newName(test4));

Créé 19/09/2018 à 14:50
source utilisateur

voix
0

Vous pouvez utiliser padStart ajouter 0 plus facilement.

voir https://codepen.io/anon/pen/bxOvmy?editors=1011

var newName = function(oldName) {
    var parseDate = oldName.split(' ');
    var monthsList = ['Gennaio','Febbraio','Marzo', 'Aprile','Maggio','Giugno', 'Luglio', 'Agosto','Settembre', 'Ottobre', 'Novembre','Dicembre'];

    var month = monthsList.indexOf(parseDate[3]) + 1;
    month = month.toString().padStart(2, "0");
    var year = parseDate[4];
    var date = parseDate[2].padStart(2, "0");
 
    return year + month + date;
}

var test1 = 'Puntata del 16 Agosto 2018';
var test2 = 'Puntata del 17 Gennaio 2018';
var test3 = 'Puntata del 7 Novembre 2017';
var test4 = 'Puntata del 2 Gennaio 2013';
console.log(test1, '-->', newName(test1));
console.log(test2, '-->', newName(test2));
console.log(test3, '-->', newName(test3));
console.log(test4, '-->', newName(test4));

Créé 19/09/2018 à 16:59
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more