web-dev-qa-db-ger.com

Javascript fügt bisher führende Nullen hinzu

Ich habe dieses Skript erstellt, um das Datum für 10 Tage im Voraus im Format TT/MM/JJJJ zu berechnen:

var MyDate = new Date();
var MyDateString = new Date();
MyDate.setDate(MyDate.getDate()+10);
MyDateString = MyDate.getDate() + '/' + (MyDate.getMonth()+1) + '/' + MyDate.getFullYear();

Ich muss das Datum mit führenden Nullen auf der Tag- und Monatskomponente erscheinen lassen, indem ich diese Regeln zum Skript hinzufüge. Ich kann es scheinbar nicht zum Laufen bringen.

if (MyDate.getMonth < 10)getMonth = '0' + getMonth;

und

if (MyDate.getDate <10)get.Date = '0' + getDate;

Wenn mir jemand zeigen könnte, wo ich diese in das Skript einfügen kann, wäre ich sehr dankbar.

379
Julian Coates

Versuchen Sie dies: http://jsfiddle.net/xA5B7/

var MyDate = new Date();
var MyDateString;

MyDate.setDate(MyDate.getDate() + 20);

MyDateString = ('0' + MyDate.getDate()).slice(-2) + '/'
             + ('0' + (MyDate.getMonth()+1)).slice(-2) + '/'
             + MyDate.getFullYear();

EDIT:

Zur Erklärung gibt .slice(-2) die letzten zwei Zeichen der Zeichenfolge an.

Egal was passiert, wir können "0" zum Tag oder Monat hinzufügen und einfach nach den letzten beiden fragen, da dies immer die beiden sind, die wir wollen.

Wenn also MyDate.getMonth()9 zurückgibt, ist dies:

("0" + "9") // Giving us "09"

wenn Sie also .slice(-2) hinzufügen, erhalten Sie die letzten beiden Zeichen:

("0" + "9").slice(-2)
"09"

Aber wenn MyDate.getMonth()10 zurückgibt, ist es:

("0" + "10") // Giving us "010"

wenn Sie also .slice(-2) hinzufügen, erhalten Sie die letzten beiden Zeichen oder:

("0" + "10").slice(-2)
"10"
1227
user113716

Hier ist ein Beispiel aus Date object docs im Mozilla Developer Network, das eine benutzerdefinierte "Pad" -Funktion verwendet, ohne dass der Zahlenprototyp von Javascript erweitert werden muss. Die praktische Funktion, die sie als Beispiel geben, ist

function pad(n){return n<10 ? '0'+n : n}

Und unten wird es im Kontext verwendet.

/* use a function for the exact format desired... */
function ISODateString(d){
    function pad(n){return n<10 ? '0'+n : n}
    return d.getUTCFullYear()+'-'
    + pad(d.getUTCMonth()+1)+'-'
    + pad(d.getUTCDate())+'T'
    + pad(d.getUTCHours())+':'
    + pad(d.getUTCMinutes())+':'
    + pad(d.getUTCSeconds())+'Z'
}

var d = new Date();
console.log(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z
97
Alex Ross

Sie können eine "str_pad" -Funktion definieren (wie in PHP):

function str_pad(n) {
    return String("00" + n).slice(-2);
}
41
joan16v

Die neue moderne Methode hierfür ist die Verwendung von toLocaleDateString , da Sie damit nicht nur ein Datum mit der richtigen Lokalisierung formatieren können, sondern auch Formatoptionen übergeben können, um das gewünschte Ergebnis zu archivieren:

var date = new Date(2018, 2, 1);
var result = date.toLocaleDateString("en-GB", { // you can skip the first argument
  year: "numeric",
  month: "2-digit",
  day: "2-digit",
});
console.log(result);

Wenn Sie das erste Argument überspringen, wird stattdessen die Browsersprache erkannt. Darüber hinaus können Sie 2-digit auch für die Jahresoption verwenden.

Wenn Sie keine alten Browser wie IE10 unterstützen müssen, ist dies die sauberste Methode, um diese Aufgabe zu erledigen. IE10 und niedrigere Versionen verstehen das Argument options nicht.

21
modiX

Für Sie Menschen aus der Zukunft (ECMAScript 2017 und darüber hinaus)

Lösung

"use strict"

const today = new Date()

const year = today.getFullYear()

const month = `${today.getMonth() + 1}`.padStart(2, 0)

const day = `${today.getDate()}`.padStart(2, 0)

const stringDate = [day, month, year].join("/") // 13/12/2017

Erklärung

das String.prototype.padStart(targetLength[, padString]) fügt so viele padString zum String.prototype -Ziel hinzu, dass die neue Länge des Ziels targetLength ist.

Beispiel

"use strict"

let month = "9"

month = month.padStart(2, 0) // "09"

let byte = "00000100"

byte = byte.padStart(8, 0) // "00000100"
19
Amin NAIRI
Number.prototype.padZero= function(len){
 var s= String(this), c= '0';
 len= len || 2;
 while(s.length < len) s= c + s;
 return s;
}

//in Benutzung:

(function(){
 var myDate= new Date(), myDateString;
 myDate.setDate(myDate.getDate()+10);

 myDateString= [myDate.getDate().padZero(),
 (myDate.getMonth()+1).padZero(),
 myDate.getFullYear()].join('/');

 alert(myDateString);
})()

/*  value: (String)
09/09/2010
*/
11
kennebec
var MyDate = new Date();
var MyDateString = '';
MyDate.setDate(MyDate.getDate());
var tempoMonth = (MyDate.getMonth()+1);
var tempoDate = (MyDate.getDate());
if (tempoMonth < 10) tempoMonth = '0' + tempoMonth;
if (tempoDate < 10) tempoDate = '0' + tempoDate;
MyDateString = tempoDate + '/' + tempoMonth + '/' + MyDate.getFullYear();
7
meaa

Ich habe den kürzesten Weg gefunden:

 MyDateString.replace(/(^|\D)(\d)(?!\d)/g, '$10$2');

fügt allen einsamen, einzelnen Ziffern führende Nullen hinzu

6
Povesma Dmytro

Erleichtern Sie sich das Leben und verwenden Sie Moment.js einen Beispielcode:

var beginDateTime = moment()
  .format('DD-MM-YYYY HH:mm')
  .toString();

// Now will print 30-06-2015 17:55
console.log(beginDateTime);
3
function formatDate(jsDate){
  // add leading zeroes to jsDate when days or months are < 10.. 
  // i.e.
  //     formatDate(new Date("1/3/2013")); 
  // returns
  //    "01/03/2103"
  ////////////////////
  return (jsDate.getDate()<10?("0"+jsDate.getDate()):jsDate.getDate()) + "/" + 
      ((jsDate.getMonth()+1)<10?("0"+(jsDate.getMonth()+1)):(jsDate.getMonth()+1)) + "/" + 
      jsDate.getFullYear();
}
3
Alex

Sie können den ternären Operator verwenden, um das Datum wie eine "if" -Anweisung zu formatieren.

Zum Beispiel:

var MyDate = new Date();
MyDate.setDate(MyDate.getDate()+10);
var MyDateString = (MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate()) + '/' + ((d.getMonth()+1) < 10 ? '0' + (d.getMonth()+1) : (d.getMonth()+1)) + '/' + MyDate.getFullYear();

Damit

(MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate())

dies ähnelt einer if-Anweisung, bei der, wenn getDate () einen Wert kleiner als 10 zurückgibt, eine '0' + das Datum zurückgegeben wird, oder wenn das Datum größer als 10 ist, das Datum zurückgegeben wird (da der führende Punkt nicht hinzugefügt werden muss) 0). Das selbe für den Monat.

Bearbeiten: Haben Sie vergessen, dass getMonth mit 0 beginnt, und haben Sie +1 hinzugefügt, um dies zu berücksichtigen. Natürlich könnte man auch einfach d.getMonth () <9: sagen, aber ich dachte, die +1 würde das Verständnis erleichtern.

3
Hellojeffy

Sie können Optionen als Parameter zum Formatieren des Datums angeben. Der erste Parameter bezieht sich auf das Gebietsschema, das Sie möglicherweise nicht benötigen, und der zweite auf Optionen. Weitere Informationen finden Sie unter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

var date = new Date(Date.UTC(2012, 1, 1, 3, 0, 0));
var options = { year: 'numeric', month: '2-digit', day: '2-digit' };
console.log(date.toLocaleDateString(undefined,options));
2
MJ55

Ich habe die richtige Antwort auf diese Frage in eine Funktion eingeschlossen, die mehrere führende Nullen hinzufügen kann, standardmäßig jedoch 1 Null hinzufügt.

function zeroFill(nr, depth){
  depth = (depth === undefined)? 1 : depth;

  var zero = "0";
  for (var i = 0; i < depth; ++i) {
    zero += "0";
  }

  return (zero + nr).slice(-(depth + 1));
}

dies ist auch ein Ansatz, um nur mit Zahlen und nicht mehr als zwei Ziffern zu arbeiten:

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

Eine weitere Option, bei der eine integrierte Funktion zum Auffüllen verwendet wird (was jedoch zu ziemlich langem Code führt!):

myDateString = myDate.getDate().toLocaleString('en-US', {minimumIntegerDigits: 2})
  + '/' + (myDate.getMonth()+1).toLocaleString('en-US', {minimumIntegerDigits: 2})
  + '/' + myDate.getFullYear();

// '12/06/2017'

Und noch eine, die Strings mit regulären Ausdrücken manipuliert:

var myDateString = myDate.toISOString().replace(/T.*/, '').replace(/-/g, '/');

// '2017/06/12'

Beachten Sie jedoch, dass das Jahr am Anfang und der Tag am Ende angezeigt wird.

1
joeytwiddle

Wie @John Henckel vorschlägt, erleichtert die Verwendung der toISOString () -Methode die Arbeit

const dateString = new Date().toISOString().split('-');
const year = dateString[0];
const month = dateString[1];
const day = dateString[2].split('T')[0];

console.log(`${year}-${month}-${day}`);
0
user615274

Was ich tun würde, ist, meinen eigenen Datumshelfer zu erstellen, der so aussieht:

var DateHelper = {
    addDays : function(aDate, numberOfDays) {
        aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
        return aDate;                                  // Return the date
    },
    format : function format(date) {
        return [
           ("0" + date.getDate()).slice(-2),           // Get day and pad it with zeroes
           ("0" + (date.getMonth()+1)).slice(-2),      // Get month and pad it with zeroes
           date.getFullYear()                          // Get full year
        ].join('/');                                   // Glue the pieces together
    }
}

// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));

(Siehe auch diese Geige )

0
John Slegers

Das Folgende zielt darauf ab, die Konfiguration zu extrahieren, sich in Date.protoype einzuhängen und die Konfiguration anzuwenden.

Ich habe ein Array zum Speichern von Zeitblöcken verwendet und wenn ich this als Date -Objekt Push(), gibt es mir die Länge zum Iterieren zurück. Wenn ich fertig bin, kann ich join für den Wert return verwenden.

Dies scheint ziemlich schnell zu funktionieren: 0.016ms

// Date protoype
Date.prototype.formatTime = function (options) {
    var i = 0,
        time = [],
        len = time.Push(this.getHours(), this.getMinutes(), this.getSeconds());

    for (; i < len; i += 1) {
        var tick = time[i];
        time[i] = tick < 10 ? options.pad + tick : tick;
    }

    return time.join(options.separator);
};

// Setup output
var cfg = {
    fieldClock: "#fieldClock",
    options: {
        pad: "0",
        separator: ":",
        tick: 1000
    }
};

// Define functionality
function startTime() {
    var clock = $(cfg.fieldClock),
        now = new Date().formatTime(cfg.options);

    clock.val(now);
    setTimeout(startTime, cfg.options.tick);
}

// Run once
startTime();

Demo: http://jsfiddle.net/tive/U4MZ3/

0
Tim Vermaelen
 let date = new Date();
 let dd = date.getDate();//day of month

 let mm = date.getMonth();// month
 let yyyy = date.getFullYear();//day of week
 if (dd < 10) {//if less then 10 add a leading zero
     dd = "0" + dd;
   }
 if (mm < 10) {
    mm = "0" + mm;//if less then 10 add a leading zero
  }
0
Deaner

Fügen Sie eine Auffüllung hinzu, um - wo erforderlich - eine führende Null zuzulassen, und verketten Sie mit dem Trennzeichen Ihrer Wahl als Zeichenfolge.

Number.prototype.padLeft = function(base,chr){
        var  len = (String(base || 10).length - String(this).length)+1;
        return len > 0? new Array(len).join(chr || '0')+this : this;
    }

var d = new Date(my_date);
var dformatted = [(d.getMonth()+1).padLeft(), d.getDate().padLeft(), d.getFullYear()].join('/');
0
TV-C-15

Wenn Sie zu @modiX answer hinzufügen, funktioniert Folgendes ... LASSEN SIE DIESES NICHT so leer

today.toLocaleDateString("default", {year: "numeric", month: "2-digit", day: "2-digit"})
0
francis