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.


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


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
}

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

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.

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

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


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

6

Nur ein weiteres Beispiel, fast ein Liner.

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

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

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;


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!


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/


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

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

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

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

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/


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

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

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

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

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

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.


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);
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.