ฉันจะรับเดือนและวันที่ของ JavaScript ในรูปแบบ 2 หลักได้อย่างไร


333

เมื่อเราเรียกgetMonth()และgetDate()บนวัตถุที่เราจะได้รับdate single digit numberตัวอย่างเช่น :

สำหรับjanuaryมันแสดงแต่ฉันต้องการที่จะแสดงเป็น1 01ทำอย่างไร



คำตอบ:


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

สำหรับวันที่และที่คล้ายกัน:

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

สำหรับเดือน


86
เจ๋ง แต่: function addZ(n){return n<10? '0'+n:''+n;}เป็นแบบทั่วไปมากกว่าเล็กน้อย
RobG

9
ชิ้นฉลาด แต่ช้ากว่าการเปรียบเทียบแบบธรรมดามาก: jsperf.com/slice-vs-comparison
dak

30
@dak: และเมื่อไหร่ที่จะเป็นเรื่องสำคัญ? ฉันสงสัยว่าคุณกำลังคำนวณเดือนนับพันครั้งต่อวินาที
Sasha Chedygov

2
@ KasperHoldum - getMonthและgetDateส่งคืนตัวเลขไม่ใช่สตริง และถ้าจำเป็นต้องใช้ความเข้ากันได้กับ Strings แล้วก็'0' + Number(n)จะทำงาน
RobG

9
@Sasha Chedygov แน่ใจว่าคุณอาจคำนวณเดือนนับพันครั้งต่อวินาทีโดยเฉพาะถ้าคุณกำลังเรียงลำดับ
Dexygen

87

หากคุณต้องการรูปแบบเช่น "YYYY-MM-DDTHH: mm: ss" นี่อาจเร็วกว่า:

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

หรือรูปแบบ MySQL datetime ที่ใช้กันทั่วไป "YYYY-MM-DD HH: mm: ss":

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

ฉันหวังว่านี่จะช่วยได้


1
นี่เป็นทางออกที่ยากที่สุดที่ฉันเคยเจอ ปัญหาเฉพาะที่นี่คือที่ของเขตเวลาชดเชย
อธิษฐาน

3
การชดเชยเขตเวลาอาจได้รับการดูแลดังนี้: var date = new Date (new Date (). getTime () - new Date (). getTimezoneOffset () * 60 * 1,000) .toISOString (). substr (0,19) .replace ('T', '');
อธิษฐาน

Praym รหัสของคุณใช้ได้กับฉัน แต่การคัดลอกและวางจะต้องมีตัวละครหรือสิ่งที่ซ่อนอยู่ดังนั้นฉันเพิ่งพิมพ์มันด้วยตัวเอง
spacebread

ฉันลงเอยกับคำถามนี้พยายามที่จะแก้ปัญหาที่แน่นอนดังนั้นเมื่อปรากฎว่าคำตอบของคุณคือสิ่งที่ฉันต้องการ
Engineer Toast

โปรดทราบว่าวิธีนี้จะส่งคืนวันที่และเวลาตามเขตเวลา UTC
Amr

41

ตัวอย่างสำหรับเดือน:

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

นอกจากนี้คุณยังสามารถขยายDateวัตถุด้วยฟังก์ชั่นดังกล่าว:

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

4
โปรดทราบว่า getMonth ส่งคืนตัวเลขระหว่าง 0 ถึง 11 ไม่ใช่ 1 และ 12
Salman A

4
ส่งคืนผลลัพธ์ที่ไม่สอดคล้องกัน สำหรับเดือนพฤศจิกายนและธันวาคมจะส่งคืนสตริงและเดือนอื่นจะส่งคืนตัวเลข
Tim Down

ฉันอัปเดตรหัสเพื่อใช้ Salman คำเตือนที่ getMonth เป็นศูนย์แทนที่จะเป็น 1 และเพิ่มเครื่องหมายคำพูดเพื่อให้แน่ใจว่าสตริงจะถูกส่งคืนเสมอ
Jan Derk

23

วิธีที่ดีที่สุดในการทำเช่นนี้คือการสร้างฟอร์แมตเตอร์เรียบง่ายของคุณเอง (ดังด้านล่าง):

getDate()ส่งกลับวันของเดือน (1-31)
getMonth()ส่งกลับเดือน (จาก 0-11) < zero-based, 0 = มกราคม, 11 = ธันวาคม
getFullYear()ส่งกลับปี (สี่หลัก) < ไม่ใช้getYear()

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

ทำไมไม่ใช้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);

จะส่งกลับตัวเลข 2 หลักเสมอแม้ว่าเดือนหรือวันจะน้อยกว่า 10

หมายเหตุ:

  • นี้จะทำงานกับ Internet Explorer ถ้ารหัส js เป็น transpiled ใช้Babel
  • getYear()ผลตอบแทนที่ได้จากปี 1900 padStartและไม่จำเป็นต้อง
  • getMonth() ส่งคืนเดือนตั้งแต่ 0 ถึง 11
    • 1 ถูกเพิ่มในเดือนก่อนที่จะเติมเพื่อเก็บ 1 ถึง 12
  • getDate() ส่งคืนวันตั้งแต่ 1 ถึง 31
    • วันที่ 7 จะกลับมา07ดังนั้นเราจึงไม่จำเป็นต้องเพิ่ม 1 ก่อนที่จะขยายสตริง

1
ได้. มันรวมอยู่ในลิงค์ MDN ด้านบน หากคุณใช้ Babel เพื่อ transpile คุณไม่ควรมีปัญหา
SomeGuyOnAComputer

10

ต่อไปนี้จะใช้ในการแปลงรูปแบบวันที่ db2 เช่น YYYY-MM-DD โดยใช้โอเปอร์เรเตอร์

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


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



5

ถ้ามันน่าจะใช้เวลาพอสมควรที่ฉันต้องการ:

YYYYMMDD

สำหรับวันนี้และเข้ากันได้กับ:

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

2
คำตอบนั้นเรียบร้อย สำหรับDD/MM/YYฉันไปที่new Date().toISOString().substr(0, 10).split('-').reverse().map(x => x.substr(0, 2)).join('/')
Max Ma

4

นี่คือทางออกของฉัน:

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;


3

ไม่ใช่คำตอบ แต่นี่คือวิธีที่ฉันจะได้รับรูปแบบวันที่ที่ฉันต้องการในตัวแปร

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

หวังว่านี่จะช่วยได้!


2

เคล็ดลับจาก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() วิธีการส่งกลับเดือนเป็นตัวเลข (0-11)

คุณสามารถแก้ไขจำนวนเดือนได้อย่างง่ายดายด้วยฟังก์ชั่นนี้

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

และอีกเวอร์ชั่นที่นี่https://jsfiddle.net/ivos/zcLxo8oy/1/หวังว่าจะเป็นประโยชน์

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

คำตอบที่นี่มีประโยชน์ แต่ฉันต้องการมากกว่านั้น: ไม่เพียงเดือน, วันที่, เดือน, ชั่วโมงและวินาทีสำหรับชื่อเริ่มต้น

ที่น่าสนใจถึงแม้ว่าจะต้องมีการเติม "0" สำหรับสิ่งที่กล่าวมาทั้งหมด แต่ "+ 1" จำเป็นสำหรับเดือนเท่านั้นไม่ใช่อย่างอื่น

ตัวอย่างเช่น

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

0

ทางออกของฉัน:

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

การใช้งาน:

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

ถ้าคุณต้องการ getDate () ฟังก์ชันส่งคืนวันที่เป็น 01 แทนที่จะเป็น 1 นี่คือรหัสของมัน .... ให้สมมติว่าวันนี้วันที่ 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

ฉันต้องการทำอะไรแบบนี้และนี่คือสิ่งที่ฉันทำ

ป.ล. ฉันรู้ว่ามีคำตอบที่ถูกต้องอยู่ด้านบน แต่เพียงต้องการเพิ่มบางสิ่งบางอย่างของฉันเองที่นี่

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

ความพยายามมากเกินไป ไม่ใช่เหรอ
ahmednawazbutt

0

หากคุณตรวจสอบน้อยกว่า 10คุณจะไม่ต้องสร้างฟังก์ชันใหม่สำหรับสิ่งนั้น เพียงแค่กำหนดตัวแปรไว้ในวงเล็บแล้วส่งคืนด้วยตัวดำเนินการที่ประกอบไปด้วยสามส่วน

(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;
},

0

ฉันขอแนะนำให้คุณใช้ห้องสมุดอื่นที่ชื่อว่า Moment https://momentjs.com/

วิธีนี้คุณสามารถจัดรูปแบบวันที่ได้โดยตรงโดยไม่ต้องทำงานเพิ่มเติม

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

ตรวจสอบให้แน่ใจว่าคุณนำเข้าช่วงเวลาเช่นกันเพื่อให้สามารถใช้งานได้

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

หวังว่านี่จะช่วยได้: D


1
Moment.js ได้รับการแนะนำแล้ว; แต่คำแนะนำของคุณยังสมบูรณ์และมีประโยชน์
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);
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.