使用Javascript将String(30-jul-2016)转换为Date(2016-07-30)

时间:2016-07-27 10:13:25

标签: javascript angularjs

我想以日期格式转换字符串。

我的字符串格式 2016年7月30日并希望转换为 2016-07-30 。只使用javascript。

6 个答案:

答案 0 :(得分:1)

为了尽可能地动态,我建议首先实现Douglas Crockford的替换函数,并将其分配给String Object的原型(How can I do string interpolation in JavaScript?)。以下是您的工作方式:

String.prototype.supplant = function (o) {
    return this.replace(/{([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
};

之后,您可以实现以下内容:

function changeFormat(from, to){
    var months = [
      'Jan',
      'Feb',
      'Mar',
      'Apr',
      'May',
      'Jun',
      'Jul',
      'Aug',
      'Sep',
      'Oct',
      'Nov',
      'Dec'
    ];
    var date = new Date(from);
    return to.supplant({
        YYYY: date.getFullYear(),
        MMM: months[date.getMonth()],
        MM: date.getMonth()+1 > 9 ? date.getMonth()+1 : '0'+parseInt(date.getMonth()+1),
        DD: date.getDate() > 9 ? date.getDate() : '0' + parseInt(date.getDate())
    })
}

这就是它的工作原理:

changeFormat("30-Jul-2016","{YYYY}-{MM}-{DD}") // 2016-07-30

示例:



String.prototype.supplant = function (o) {
    return this.replace(/{([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
};

function changeFormat(from, to){
    var months = [
      'Jan',
      'Feb',
      'Mar',
      'Apr',
      'May',
      'Jun',
      'Jul',
      'Aug',
      'Sep',
      'Oct',
      'Nov',
      'Dec'
    ];
    var date = new Date(from);
    return to.supplant({
        YYYY: date.getFullYear(),
        MMM: months[date.getMonth()],
        MM: date.getMonth()+1 > 9 ? date.getMonth()+1 : '0'+parseInt(date.getMonth()+1),
        DD: date.getDate() > 9 ? date.getDate() : '0' + parseInt(date.getDate())
    })
}

console.log(changeFormat("30-Jul-2016","{YYYY}-{MM}-{DD}"));




答案 1 :(得分:0)

没有像Moment这样的库,最好的方法是保持一个月的数组来获得数值(不能保证每个浏览器都会解析那个日期),然后只需分割字符串并解析它

var months = [
  'Jan',
  'Feb',
  'Mar',
  'Apr',
  'May',
  'Jun',
  'Jul',
  'Aug',
  'Sep',
  'Oct',
  'Nov',
  'Dec'
];

function pad(x) {return x < 10 ? '0' + x : x}; // zero padding

var str   = "30-Jul-2016";
var parts = str.split('-');
var date  = new Date(parts[2], months.indexOf(parts[1]), parts[0]);

// now you can output whatever

var new_date = date.getFullYear() + '-' + pad(date.getMonth() + 1) + '-' + pad(date.getDate());

document.body.innerHTML = new_date;

答案 2 :(得分:0)

另一种方式:

function formatDate(string) {
  var date = new Date(string),
      dd = date.getDate(),
      mm = date.getMonth() + 1,
      yyyy = date.getFullYear();

  dd = dd < 10 ? '0' + dd : dd;
  mm = mm < 10 ? '0' + mm : mm;

  return yyyy + '-' + mm + '-' + dd;
}

console.log(formatDate('30-Jul-2016')); // 2016-07-30

答案 3 :(得分:0)

var d = new Date('30-Jul-2016'.split('-').join(' ')),
    dFormated = d.getFullYear() + '-' + ('0' + (d.getMonth() + 1)).slice(-2) + '-' + d.getDate();

console.log(dFormated);

答案 4 :(得分:0)

试试这个

var date = '30-Jul-2016';
date = date.split('-').join(' ');
var d = new Date(date);
alert(d.getFullYear() + '-'+(d.getMonth()+1) +'-'+ d.getDate());
console.log(d.getFullYear() + '-'+(d.getMonth()+1) +'-'+ d.getDate());

答案 5 :(得分:0)

试试此代码

var date = '30-Jul-2016';
date = date.split('-').join(' ');
var d = new Date(date);
    dd = d.getDate();
      mm = d.getMonth() + 1;
      yyyy = d.getFullYear();

  dd = dd < 10 ? '0' + dd : dd;
  mm = mm < 10 ? '0' + mm : mm;
alert(yyyy + '-'+mm +'-'+ dd);