Wie erhalte ich Monat und Datum von JavaScript im zweistelligen Format?

Antworten:

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

für das Datum und ähnlich:

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

für den Monat.

Hugo
quelle
86
Cool, aber: function addZ(n){return n<10? '0'+n:''+n;}ist etwas allgemeiner.
RobG
8
Slice ist klug, aber viel langsamer als ein einfacher Vergleich: jsperf.com/slice-vs-comparison
dak
30
@dak: Und wann wird das realistisch wichtig sein? Ich bezweifle, dass Sie den Monat tausende Male pro Sekunde berechnen.
Sasha Chedygov
2
@ KasperHoldum– getMonthund getDategeben Zahlen zurück, keine Zeichenfolgen. Und wenn Kompatibilität mit Strings erforderlich ist, '0' + Number(n)wird dies erledigt.
RobG
9
@ Sasha Chedygov sicher, dass Sie den Monat tausende Male pro Sekunde berechnen könnten, besonders wenn Sie sortieren
Dexygen
87

Wenn Sie ein Format wie "JJJJ-MM-TTTHH: mm: ss" möchten, ist dies möglicherweise schneller:

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

Oder das häufig verwendete MySQL-Datums- / Uhrzeitformat "JJJJ-MM-TT HH: mm: ss":

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

ich hoffe das hilft

Qiniso
quelle
1
Dies ist die knappste Lösung, die mir begegnet ist. Das einzige Problem hierbei ist der Zeitzonenversatz.
Praym
3
Der Zeitzonenversatz könnte wie folgt behoben werden: var date = neues Datum (neues Datum (). GetTime () - neues Datum (). GetTimezoneOffset () * 60 * 1000) .toISOString (). Substr (0,19) .replace ('T', '');
Praym
Praym, dein Code funktioniert für mich, aber das Kopieren und Einfügen muss einen versteckten Charakter oder etwas anderes gehabt haben, also habe ich ihn einfach von Hand eingegeben.
Weltraumbrot
Am Ende bin ich auf diese Frage gekommen, um genau dieses Problem zu lösen. Wie sich herausstellt, ist Ihre Antwort genau das, was ich brauchte.
Ingenieur Toast
Beachten Sie, dass diese Methode Datum und Uhrzeit gemäß der UTC-Zeitzone zurückgibt.
Amr
41

Beispiel für Monat:

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

Sie können das DateObjekt auch mit folgender Funktion erweitern:

Date.prototype.getMonthFormatted = function() {
  var month = this.getMonth() + 1;
  return month < 10 ? '0' + month : '' + month; // ('' + month) for string result
}
Sergey Metlov
quelle
4
Beachten Sie, dass getMonth eine Zahl zwischen 0 und 11 zurückgibt, nicht zwischen 1 und 12.
Salman A
4
Dies gibt inkonsistente Ergebnisse zurück. Für November und Dezember wird eine Zeichenfolge und für andere Monate eine Zahl zurückgegeben.
Tim Down
Ich habe den Code aktualisiert, um Salman zu implementieren. Eine Warnung, dass getMonth auf Null anstatt auf 1 basiert. Außerdem wurden Anführungszeichen hinzugefügt, um sicherzustellen, dass immer eine Zeichenfolge zurückgegeben wird.
Jan Derk
23

Der beste Weg, dies zu tun, besteht darin, einen eigenen einfachen Formatierer zu erstellen (siehe unten):

getDate()gibt den Tag des Monats zurück (von 1-31)
getMonth()gibt den Monat zurück (von 0-11) <nullbasiert , 0 = Januar, 11 = Dezember
getFullYear() gibt das Jahr zurück (vier Ziffern) < nicht verwendengetYear()

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);
}
Marcel
quelle
20

Warum nicht verwenden 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);

Dies gibt immer zweistellige Zahlen zurück, auch wenn der Monat oder Tag kleiner als 10 ist.

Anmerkungen:

  • Dies funktioniert nur mit Internet Explorer, wenn der js-Code mit babel transpiliert wird .
  • getYear() gibt das Jahr von 1900 zurück und benötigt nicht padStart .
  • getMonth() Gibt den Monat von 0 bis 11 zurück.
    • 1 wird dem Monat vor dem Auffüllen hinzugefügt, um 1 bis 12 zu erhalten
  • getDate() Gibt den Tag von 1 bis 31 zurück.
    • Der 7. Tag wird zurückkehren 07und wir müssen keine 1 hinzufügen, bevor wir den String auffüllen.
SomeGuyOnAComputer
quelle
1
Zu padStart
Ihrer Information
1
Jep. Es ist im obigen MDN-Link enthalten. Wenn Sie babel zum Transpilieren verwenden, sollten Sie kein Problem haben.
SomeGuyOnAComputer
9

Das Folgende wird verwendet, um das Datumsformat db2, dh JJJJ-MM-TT, mit dem ternären Operator zu konvertieren

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);
Gnanasekaran Ebinezar
quelle
7

Ich würde das tun:

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

Fernando Vezzali
quelle
Sollte die akzeptierte Antwort sein.
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;
}
ssamuel68
quelle
6

Nur ein weiteres Beispiel, fast ein Liner.

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

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

Wenn es etwas Zeit sparen könnte, suchte ich nach:

YYYYMMDD

für heute und verstanden sich mit:

const dateDocumentID = new Date()
  .toISOString()
  .substr(0, 10)
  .replace(/-/g, '');
Verrückter Barney
quelle
2
Die Antwort ist ordentlich. Denn DD/MM/YYich ging zunew Date().toISOString().substr(0, 10).split('-').reverse().map(x => x.substr(0, 2)).join('/')
Max Ma
4

Das war meine Lösung:

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;
Jon
quelle
4

Mit Moment.js kann es so gemacht werden:

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

Keine Antwort, aber hier ist, wie ich das Datumsformat erhalte, das ich in einer Variablen benötige

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

Hoffe das hilft!

Foxybagga
quelle
2

Tipp von 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/

Laurent Belloeil
quelle
2

new Date().getMonth() Methode gibt den Monat als Zahl zurück (0-11)

Mit dieser Funktion können Sie die Monatszahl leicht korrigieren.

function monthFormatted() {
  var date = new Date(),
      month = date.getMonth();
  return month+1 < 10 ? ("0" + month) : month;
}
Mehmet Özkan YAVUZ
quelle
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]; 
}
Emrah KAYNAR
quelle
1

Und eine andere Version hier https://jsfiddle.net/ivos/zcLxo8oy/1/ , hoffe nützlich zu sein.

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")
i100
quelle
1

Die Antworten hier waren hilfreich, aber ich brauche mehr als das: nicht nur Monat, Datum, Monat, Stunden und Sekunden für einen Standardnamen.

Interessanterweise wurde, obwohl für alle oben genannten Punkte ein "0" vorangestellt wurde, "+ 1" nur für einen Monat benötigt, nicht für andere.

Zum Beispiel:

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

Meine Lösung:

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

Verwendungszweck:

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

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

user3336882
quelle
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]))
Chí Nguyễn
quelle
0

Wenn Sie möchten, dass die Funktion getDate () das Datum als 01 anstelle von 1 zurückgibt, finden Sie hier den Code dafür .... Nehmen wir an, das heutige Datum ist der 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
Jayanth G.
quelle
0

Ich wollte so etwas machen und das habe ich gemacht

ps Ich weiß, dass es oben die richtigen Antworten gibt, wollte aber hier nur etwas Eigenes hinzufügen

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;
}
Mohid Kazi
quelle
zu viel Aufwand. Ist es nicht?
ahmednawazbutt
0

Wenn Sie kleiner als 10 markieren, müssen Sie dafür keine neue Funktion erstellen. Weisen Sie einfach eine Variable in Klammern zu und geben Sie sie mit dem ternären Operator zurück.

(m = new Date().getMonth() + 1) < 10 ? `0${m}` : `${m}`
Selmansamet
quelle
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;
},
Arun Verma
quelle
das ist zu viel
arbeit
0

Ich würde vorschlagen, dass Sie eine andere Bibliothek namens Moment https://momentjs.com/ verwenden.

Auf diese Weise können Sie das Datum direkt formatieren, ohne zusätzliche Arbeit leisten zu müssen

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

Stellen Sie sicher, dass Sie auch moment importieren, um ihn verwenden zu können.

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

Hoffe das hilft: D.

Sasha Larson
quelle
1
Moment.js wurde bereits vorgeschlagen; Ihr Rat ist jedoch immer noch vollständig und nützlich.
Am
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);
});
sbcharya
quelle