在javascript中将日期字符串转换为dd / mm / yy

covert date string to dd/mm/yy in javascript

我想转换

1
Tue Jul 12 2016 00:00:00 GMT+0100 (BST)

1
12/07/2016

说我有d = 2016年7月12日星期二00:00:00 GMT + 0100(BST)。 我试过了

1
var a = d.getDate()+"/"+(d.getMonth()+1)+"/"+d.getFullYear();

但后来我得到12/7/2016而不是2016年7月12日

我可以

1
2
if(d.getMonth()<10){
    var a = d.getDate()+"/0"+(d.getMonth()+1)+"/"+d.getFullYear();

但是我不喜欢这个,而且当这一天小于10时我会遇到同样的问题。什么是达到我想要的格式的最好方法。 我只需将它作为一个字符串在视图中显示。


那这个呢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var month = 7; // july (months are base 0)
var day = 12;
var year = 2016;
var d = new Date(year,month-1,day);

var a = pad(d.getDate(),2)+"/"+pad(d.getMonth()+1,2)+"/"+d.getFullYear();
console.log(a)


function pad(num, size) {
    var s = num+"";
    while (s.length < size) s ="0" + s;
    return s;
}

使用如何在JavaScript中输出带前导零的整数的填充函数

您可能还想查看http://momentjs.com/以"在JavaScript中解析,验证,操作和显示日期"。

这是另一个填充函数(我已经使用了很多)

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
var month = 7; // july (months are base 0)
var day = 12;
var year = 2016;
var d = new Date(year,month-1,day);

var a = pad(d.getDate(),2)+"/"+pad(d.getMonth()+1,2)+"/"+d.getFullYear();
console.log(a)

/**
 * Returns a zero-padded string of length characters
 * When the number is more than the length, the number is returned
 * in its full length (longer than the specified length)
 * @param {Number} number The number to be padded
 * @param {Number=2} length
 * @returns {String} the padded String or the number if longer than specified length
 */

function pad(number, length) {
    if (length === undefined) {
        length = 2;
    }
    var missing = length - digits(number);
    if (missing < 0)  return number.toString();
    return Array(missing + 1).join("0") + number.toString();
}

/**
 * Utility function to return the number of digits of a number
 * @param {Number} int the number for which to get the #digits
 * @returns {Number} the number of digits
 */

function digits(int) {
    return Math.floor(Math.log(int) / Math.LN10 + 1);
}


诀窍是添加一个条件来检查一天或一个月是否小于10,如果是这样,添加一个0。下面这个方法是它的简写版本,但它的工作原理。 当然,我有一些额外的东西,比如yyyy,mm和dd的定义,只是为了让事情的来源更加清晰。 但是return中的部分是神奇的,你可以应用于你的情况。

1
2
3
4
5
6
7
8
Date.prototype.yyyymmdd = function() {
  var yyyy = this.getFullYear().toString();
  var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
  var dd  = this.getDate().toString();
  return (mm[1]?mm:"0"+mm[0]) +"/" + (dd[1]?dd:"0"+dd[0]) +"/" + yyyy; // padding
 };
d = new Date();
document.getElementById("date").innerHTML = d.yyyymmdd();
1
<span id="date"></span>


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
var date = new Date();

var dateFormat = getFormatDate(date);
var dateOneLiner = getFormattedDateOneLiner(date);

console.log("DateFormat", dateFormat);
console.log("OneLiner", dateOneLiner);




function getFormatDate(pDate)
{
  var day = pDate.getDate();
  var month = pDate.getMonth() + 1;
  var year = pDate.getFullYear();
 
  if(month < 10)
    month ="0" + month;
 
  if(day < 10)
    day ="0" + day;
   
  return day +"/" + month +"/" + year;
}

function getFormattedDateOneLiner(pDate)
{  
  return (pDate.getDate() < 10 ?"0" + pDate.getDate() : pDate.getDate()) +"/" + ((pDate.getMonth() + 1) < 10 ?"0" + (pDate.getMonth() + 1) : (pDate.getMonth() + 1)) +"/" + pDate.getFullYear();
}


有很多方法可以做到这一点。 这里有两个可能的单行:

1
2
3
var a = ("0"+d.getDate()).slice(-2)+"/"+("0"+(d.getMonth()+1)).slice(-2)+"/"+d.getFullYear();

var a = ("0"+d.getDate()+"/0"+(d.getMonth()+1)).replace(/\d(\d\d)/g, '$1')+"/"+d.getFullYear();

你可以这样一行:

1
2
3
    var a = (d.getDate() < 10?"0"+d.getDate():d.getDate())
     +"/"+   (d.getMonth()+1 <10? ("0"+d.getMonth()+1):d.getMonth()+1 )
     +"/"+d.getFullYear();