Làm cách nào để tôi nhận được Tháng và Ngày của JavaScript ở định dạng 2 chữ số?


Câu trả lời:


807
("0" + this.getDate()).slice(-2)

cho ngày và tương tự:

("0" + (this.getMonth() + 1)).slice(-2)

trong tháng


86
Thật tuyệt, nhưng: function addZ(n){return n<10? '0'+n:''+n;}chung chung hơn một chút.
RobG

8
lát cắt là thông minh, nhưng nó chậm hơn nhiều so với một so sánh đơn giản: jsperf.com/slice-vs-comparison
dak

30
@dak: Và khi nào thì thực tế sẽ có vấn đề? Tôi nghi ngờ bạn đang tính toán hàng ngàn lần một giây.
Sasha Chedygov

2
@ KasperHoldum Quay lại getMonthgetDatetrả về số, không phải chuỗi. Và nếu khả năng tương thích với String là bắt buộc, thì '0' + Number(n)sẽ thực hiện công việc.
RobG

9
@Sasha Chedygov chắc chắn bạn có thể tính toán hàng nghìn lần một giây, đặc biệt nếu bạn đang sắp xếp
Dexygen

87

Nếu bạn muốn một định dạng như "YYYY-MM-DDTHH: mm: ss", thì điều này có thể nhanh hơn:

var date = new Date().toISOString().substr(0, 19);
// toISOString() will give you YYYY-MM-DDTHH:mm:ss.sssZ

Hoặc định dạng datetime MySQL thường được sử dụng "YYYY-MM-DD HH: mm: ss":

var date2 = new Date().toISOString().substr(0, 19).replace('T', ' ');

Tôi hi vọng cái này giúp được


1
Đây là giải pháp căng thẳng nhất mà tôi đã đi qua. Vấn đề duy nhất ở đây là bù thời gian.
Cầu nguyện

3
Việc bù múi giờ có thể được xử lý bằng một cái gì đó như: var date = new Date (new Date (). GetTime () - new Date (). GetTimezone Offerset () * 60 * 1000) .toISOString (). Chất nền (0,19) .replace ('T', '');
Cầu nguyện

Xin cầu nguyện, mã của bạn hoạt động với tôi, nhưng sao chép và dán phải có một số ký tự ẩn hoặc một cái gì đó, vì vậy tôi chỉ cần gõ tay nó.
spacebread

Tôi đã kết thúc câu hỏi này để cố gắng giải quyết vấn đề chính xác này vì vậy, hóa ra, câu trả lời của bạn là điều tôi cần.
Kỹ sư Toast

Lưu ý rằng phương pháp này sẽ trả về ngày và giờ theo múi giờ UTC.
Amr

41

Ví dụ cho tháng:

function getMonth(date) {
  var month = date.getMonth() + 1;
  return month < 10 ? '0' + month : '' + month; // ('' + month) for string result
}  

Bạn cũng có thể mở rộng Dateđối tượng với chức năng như vậy:

Date.prototype.getMonthFormatted = function() {
  var month = this.getMonth() + 1;
  return month < 10 ? '0' + month : '' + month; // ('' + month) for string result
}

4
Lưu ý rằng getMonth trả về một số từ 0 đến 11, không phải 1 đến 12.
Salman A

4
Điều này trả về kết quả không nhất quán. Trong tháng 11 và tháng 12, nó trả về một chuỗi và trong các tháng khác, nó trả về một số.
Tim xuống

Tôi đã cập nhật mã để triển khai Salman Một cảnh báo rằng getMonth không dựa trên 1. Thay vào đó và thêm dấu ngoặc kép để đảm bảo chuỗi luôn được trả về.
Jan Derk

23

Cách tốt nhất để làm điều này là tạo trình định dạng đơn giản của riêng bạn (như bên dưới):

getDate()trả về ngày trong tháng (từ 1-31)
getMonth()trả về tháng (từ 0-11) < dựa trên 0, 0 = tháng 1, 11 = tháng 12
getFullYear() trả về năm (bốn chữ số) < không sử dụnggetYear()

function formatDateToString(date){
   // 01, 02, 03, ... 29, 30, 31
   var dd = (date.getDate() < 10 ? '0' : '') + date.getDate();
   // 01, 02, 03, ... 10, 11, 12
   var MM = ((date.getMonth() + 1) < 10 ? '0' : '') + (date.getMonth() + 1);
   // 1970, 1971, ... 2015, 2016, ...
   var yyyy = date.getFullYear();

   // create the format you want
   return (dd + "-" + MM + "-" + yyyy);
}

20

Tại sao không sử dụng padStart?

var dt = new Date();

year  = dt.getYear() + 1900;
month = (dt.getMonth() + 1).toString().padStart(2, "0");
day   = dt.getDate().toString().padStart(2, "0");

console.log(year + '/' + month + '/' + day);

Điều này sẽ luôn trả về 2 chữ số ngay cả khi tháng hoặc ngày nhỏ hơn 10.

Ghi chú:

  • Điều này sẽ chỉ hoạt động với Internet Explorer nếu mã js được dịch mã bằng babel .
  • getYear()trả lại năm từ 1900 và không yêu cầu padStart.
  • getMonth() trả về tháng từ 0 đến 11.
    • 1 được thêm vào tháng trước khi đệm để giữ cho 1 đến 12
  • getDate() trả lại ngày từ 1 đến 31.
    • ngày thứ 7 sẽ trở lại 07và vì vậy chúng ta không cần thêm 1 trước khi đệm chuỗi.

1
FYI, padStartkhông hoạt động với IE
khcpietro

1
Vâng Nó được bao gồm trong liên kết MDN ở trên. Nếu bạn sử dụng babel để dịch mã, bạn sẽ không gặp vấn đề gì.
Một sốGuyOnAComputer

9

Sau đây được sử dụng để chuyển đổi định dạng ngày db2, tức là YYYY-MM-DD bằng cách sử dụng toán tử ternary

var currentDate = new Date();
var twoDigitMonth=((currentDate.getMonth()+1)>=10)? (currentDate.getMonth()+1) : '0' + (currentDate.getMonth()+1);  
var twoDigitDate=((currentDate.getDate())>=10)? (currentDate.getDate()) : '0' + (currentDate.getDate());
var createdDateTo = currentDate.getFullYear() + "-" + twoDigitMonth + "-" + twoDigitDate; 
alert(createdDateTo);

7

Tôi sẽ làm điều này:

var d = new Date('January 13, 2000');
var s = d.toLocaleDateString('en-US', { month: '2-digit', day: '2-digit', year: 'numeric' });
console.log(s); // prints 01/13/2000


Nên là câu trả lời được chấp nhận.
Aaron

6
function monthFormated(date) {
   //If date is not passed, get current date
   if(!date)
     date = new Date();

     month = date.getMonth();

    // if month 2 digits (9+1 = 10) don't add 0 in front 
    return month < 9 ? "0" + (month+1) : month+1;
}

6

Chỉ là một ví dụ khác, gần như một lớp lót.

var date = new Date();
console.log( (date.getMonth() < 9 ? '0': '') + (date.getMonth()+1) );


5
function monthFormated() {
  var date = new Date(),
      month = date.getMonth();
  return month+1 < 10 ? ("0" + month) : month;
}

5

Nếu nó có thể dành chút thời gian tôi sẽ tìm cách để có được:

YYYYMMDD

cho ngày hôm nay, và đã cùng với:

const dateDocumentID = new Date()
  .toISOString()
  .substr(0, 10)
  .replace(/-/g, '');

2
Câu trả lời là gọn gàng. Vì DD/MM/YY, tôi đã đếnnew Date().toISOString().substr(0, 10).split('-').reverse().map(x => x.substr(0, 2)).join('/')
Max Ma

4

Đây là giải pháp của tôi:

function leadingZero(value) {
  if (value < 10) {
    return "0" + value.toString();
  }
  return value.toString();
}

var targetDate = new Date();
targetDate.setDate(targetDate.getDate());
var dd = targetDate.getDate();
var mm = targetDate.getMonth() + 1;
var yyyy = targetDate.getFullYear();
var dateCurrent = leadingZero(mm) + "/" + leadingZero(dd) + "/" + yyyy;

4

Sử dụng Moment.js có thể được thực hiện như thế:

moment(new Date(2017, 1, 1)).format('DD') // day
moment(new Date(2017, 1, 1)).format('MM') // month

3

Không phải là một câu trả lời nhưng đây là cách tôi có được định dạng ngày tôi yêu cầu trong một biến

function setDateZero(date){
  return date < 10 ? '0' + date : date;
}

var curr_date = ev.date.getDate();
var curr_month = ev.date.getMonth() + 1;
var curr_year = ev.date.getFullYear();
var thisDate = curr_year+"-"+setDateZero(curr_month)+"-"+setDateZero(curr_date);

Hi vọng điêu nay co ich!


2

Mẹo từ MDN :

function date_locale(thisDate, locale) {
  if (locale == undefined)
    locale = 'fr-FR';
  // set your default country above (yes, I'm french !)
  // then the default format is "dd/mm/YYY"

  if (thisDate == undefined) {
    var d = new Date();
  } else {
    var d = new Date(thisDate);
  }
  return d.toLocaleDateString(locale);
}

var thisDate = date_locale();
var dayN = thisDate.slice(0, 2);
var monthN = thisDate.slice(3, 5);
console.log(dayN);
console.log(monthN);

http://jsfiddle.net/v4qcf5x6/


2

new Date().getMonth() phương thức trả về tháng dưới dạng số (0-11)

Bạn có thể dễ dàng nhận được số tháng chính xác với chức năng này.

function monthFormatted() {
  var date = new Date(),
      month = date.getMonth();
  return month+1 < 10 ? ("0" + month) : month;
}

1
function GetDateAndTime(dt) {
  var arr = new Array(dt.getDate(), dt.getMonth(), dt.getFullYear(),dt.getHours(),dt.getMinutes(),dt.getSeconds());

  for(var i=0;i<arr.length;i++) {
    if(arr[i].toString().length == 1) arr[i] = "0" + arr[i];
  }

  return arr[0] + "." + arr[1] + "." + arr[2] + " " + arr[3] + ":" + arr[4] + ":" + arr[5]; 
}

1

Và một phiên bản khác tại đây https://jsfiddle.net/ivos/zcLxo8oy/1/ , hy vọng sẽ hữu ích.

var dt = new Date(2016,5,1); // just for the test
var separator = '.';
var strDate = (dt.getFullYear() + separator + (dt.getMonth() + 1) + separator + dt.getDate());
// end of setup

strDate = strDate.replace(/(\b\d{1}\b)/g, "0$1")

1

Các câu trả lời ở đây rất hữu ích, tuy nhiên tôi cần nhiều hơn thế: không chỉ tháng, ngày, tháng, giờ & giây, cho một tên mặc định.

Thật thú vị, mặc dù trả trước "0" là cần thiết cho tất cả các bên trên, "+ 1" chỉ cần thiết cho tháng, không phải cho những người khác.

Ví dụ như:

("0" + (d.getMonth() + 1)).slice(-2)     // Note: +1 is needed
("0" + (d.getHours())).slice(-2)         // Note: +1 is not needed

0

Giải pháp của tôi:

function addLeadingChars(string, nrOfChars, leadingChar) {
    string = string + '';
    return Array(Math.max(0, (nrOfChars || 2) - string.length + 1)).join(leadingChar || '0') + string;
}

Sử dụng:

var
    date = new Date(),
    month = addLeadingChars(date.getMonth() + 1),
    day = addLeadingChars(date.getDate());

jsfiddle: http://jsfiddle.net/8xy4Q/1/


0
var net = require('net')

function zeroFill(i) {
  return (i < 10 ? '0' : '') + i
}

function now () {
  var d = new Date()
  return d.getFullYear() + '-'
    + zeroFill(d.getMonth() + 1) + '-'
    + zeroFill(d.getDate()) + ' '
    + zeroFill(d.getHours()) + ':'
    + zeroFill(d.getMinutes())
}

var server = net.createServer(function (socket) {
  socket.end(now() + '\n')
})

server.listen(Number(process.argv[2]))

0

nếu bạn muốn hàm getDate () trả về ngày là 01 thay vì 1, đây là mã cho nó .... Hãy giả sử ngày hôm nay là ngày 01-11-2018

var today = new Date();
today = today.getFullYear()+ "-" + (today.getMonth() + 1) + "-" + today.getDate();      
console.log(today);       //Output: 2018-11-1


today = today.getFullYear()+ "-" + (today.getMonth() + 1) + "-" + ((today.getDate() < 10 ? '0' : '') + today.getDate());
console.log(today);        //Output: 2018-11-01

0

Tôi muốn làm một cái gì đó như thế này và đây là những gì tôi đã làm

ps tôi biết có câu trả lời đúng trên đầu, nhưng chỉ muốn thêm một cái gì đó của riêng tôi ở đây

const todayIs = async () =>{
    const now = new Date();
    var today = now.getFullYear()+'-';
    if(now.getMonth() < 10)
        today += '0'+now.getMonth()+'-';
    else
        today += now.getMonth()+'-';
    if(now.getDay() < 10)
        today += '0'+now.getDay();
    else
        today += now.getDay();
    return today;
}

nỗ lực quá nhiều. Phải không?
ahmednawazbutt

0

Nếu bạn kiểm tra nhỏ hơn 10 , bạn sẽ không tạo ra một chức năng mới cho điều đó. Chỉ cần gán một biến vào ngoặc và trả về nó với toán tử ternary.

(m = new Date().getMonth() + 1) < 10 ? `0${m}` : `${m}`

0
currentDate(){
        var today = new Date();
        var dateTime =  today.getFullYear()+'-'+
                        ((today.getMonth()+1)<10?("0"+(today.getMonth()+1)):(today.getMonth()+1))+'-'+
                        (today.getDate()<10?("0"+today.getDate()):today.getDate())+'T'+
                        (today.getHours()<10?("0"+today.getHours()):today.getHours())+ ":" +
                        (today.getMinutes()<10?("0"+today.getMinutes()):today.getMinutes())+ ":" +
                        (today.getSeconds()<10?("0"+today.getSeconds()):today.getSeconds());        
            return dateTime;
},

đây là quá nhiều công việc
ahmednawazbutt

0

Tôi sẽ đề nghị bạn sử dụng một thư viện khác có tên là Moment https://momentjs.com/

Bằng cách này, bạn có thể định dạng ngày trực tiếp mà không phải làm thêm

const date = moment().format('YYYY-MM-DD')
// date: '2020-01-04'

Hãy chắc chắn rằng bạn cũng nhập thời điểm để có thể sử dụng nó.

yarn add moment 
# to add the dependency
import moment from 'moment' 
// import this at the top of the file you want to use it in

Hy vọng điều này sẽ giúp: D


1
Moment.js đã được đề xuất; nhưng lời khuyên của bạn vẫn đầy đủ và hữu ích.
IND

0
$("body").delegate("select[name='package_title']", "change", function() {

    var price = $(this).find(':selected').attr('data-price');
    var dadaday = $(this).find(':selected').attr('data-days');
    var today = new Date();
    var endDate = new Date();
    endDate.setDate(today.getDate()+parseInt(dadaday));
    var day = ("0" + endDate.getDate()).slice(-2)
    var month = ("0" + (endDate.getMonth() + 1)).slice(-2)
    var year = endDate.getFullYear();

    var someFormattedDate = year+'-'+month+'-'+day;

    $('#price_id').val(price);
    $('#date_id').val(someFormattedDate);
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.