更改某些字符串的格式

时间:2018-09-19 13:35:46

标签: javascript date datetime

我有以下格式的字符串:

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

我想得到:

20180816
20180117
20171107
20130102

我该怎么做?

那是年,月(两位数)和天(两位数)。

对于年份来说很容易:只取字符串的最后四个字符,而取日期和月份呢?

这是我正在创建的代码:

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

3 个答案:

答案 0 :(得分:1)

要获得预期的结果,请使用下面的从月份名称数组中查找月份值的选项

  1. 使用Months数组查找月份值并将其格式化以添加'0'(如果它小于10的话)
  2. 使用带有空格的split('')方法,日期可以分为日期,月份,年份
  3. 格式化月份以添加'0'(如果它小于10)

codepen供参考-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));

答案 1 :(得分:1)

如果您使用RegExp函数exec,尽管第一个元素将是“ whole match”,但可以从查询返回匹配组,则可以删除一些子字符串切片。

一旦有了日期片段数组,就可以通过reduceRight数组函数以相反的顺序将其还原为字符串。

请注意padStart是一个String函数,因此您必须先将数字转换为字符串。这可以通过将它们与空字符串(即('' + <number>).padStart(...))连接来实现,我使用方括号来确保语句的正确执行顺序

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

答案 2 :(得分:0)

您可以使用padStart来轻松添加0。

请参见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));