자바 스크립트는 날짜에 선행 0을 추가합니다


437

dd / mm / yyyy 형식으로 미리 10 일 동안 날짜를 계산하기 위해이 스크립트를 작성했습니다.

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

이 규칙을 스크립트에 추가하여 날짜와 요일 구성 요소에 날짜가 선행 0으로 표시되도록해야합니다. 작동하지 않는 것 같습니다.

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

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

누군가 스크립트에 삽입 할 위치를 보여 줄 수 있다면 정말 감사 할 것입니다.


6
좋은 규칙으로 변수 이름의 첫 번째 문자를 소문자로 사용하고 객체 / 시제품 용 낙타 케이싱을 예약해야합니다.
zykadelic

YYYY-MM-DD 형식이 수용 가능하면 다음과 같은 정답이 될 것입니다. stackoverflow.com/a/28431880/1717535
Fabien Snauwaert

답변:


1352

이것을 시도하십시오 : 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();

편집하다:

설명 을 위해 문자열 .slice(-2)마지막 두 문자를 제공합니다.

어떤 일이 있어도 "0"하루나 한 달에 추가 할 수 있으며 , 항상 두 개가 필요하기 때문에 마지막 두 개만 요청하면됩니다.

따라서 MyDate.getMonth()반환 9하면 다음과 같습니다.

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

그래서 그것을 추가 .slice(-2)하면 마지막 두 문자가 나타납니다.

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

그러나을 MyDate.getMonth()반환 10하면 다음과 같습니다.

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

추가 .slice(-2)하면 마지막 두 문자가 나타납니다.

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

27
갈래-날짜 형식 YYYY-MM-DD jsfiddle.net/j6qJp/1 누군가에게 유용 할 수 있습니다. 감사합니다
tomexx

3
누군가 @Aleross가 제공하는 답변보다 이것이 왜 더 좋은지 설명 할 수 있습니까? 명확하게 명확한 패드 기능과 그 기능을 즉시 명확하게 알 수는 없습니다.
claudio

2
말할 것도없이이 예제는
2014

3
@DazManCat : 그것이해야 할 일입니다. 코드는 현재 날짜에 20 일을 추가하여 시작합니다. MyDate.setDate(MyDate.getDate() + 20);
쿠키 몬스터

3
@ n00b와 @Phil Cooper는 JavaScript 루틴의 타이밍에 대한 논의에 매달리지 않고 slice()받아 들여진 대답의 pad()기술 이 @Aleross의 기술 보다 약 1/10 초 빠릅니다 . 백만 번의 반복. jsFiddle . "돈을 내고 골라라"
Karl

105

다음은 Javascript의 Number 프로토 타입을 확장하지 않고도 사용자 정의 "pad"기능을 사용하는 Mozilla Developer Network 의 Date 오브젝트 문서 의 예입니다 . 그들이 보여주는 편리한 기능은

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

아래는 맥락에서 사용됩니다.

/* 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

3
아주 좋은 방법입니다. 나는 받아 들여진 대답이 정말 좋았다고 생각하지만 이것도 제 생각에는 더 깨끗합니다
Binke

1
이로 인해 예기치 않은 버그가 발생하여 <10의 문자열과 10 이상의 숫자를 출력합니다.
David Fregoli

@DavidFregoli, 모든 날짜-문자열 함수는 문자열을 반환하므로 문자열을 입력하면 문자열 pad만 출력합니다.
Rohmer

56

이를위한 새로운 현대적인 방법은을 사용 toLocaleDateString하는 것입니다. 적절한 현지화로 날짜를 형식화 할 수있을뿐만 아니라 형식 옵션을 전달하여 원하는 결과를 보관할 수도 있습니다.

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

첫 번째 인수를 건너 뛰면 대신 브라우저 언어가 감지됩니다. 또는 2-digit연도 옵션을 사용할 수도 있습니다 .

IE10과 같은 오래된 브라우저를 지원할 필요가 없으면 작업을 수행하는 가장 깨끗한 방법입니다. IE10 이하 버전은 옵션 인수를 이해하지 못합니다.

참고 : toLocaleTimeString날짜 시간을 현지화하거나 형식을 지정하려는 경우 에도 있습니다.


3
이것이 바로 내가 찾던 것입니다. 감사합니다. toLocaleDateString에 사용할 수있는 옵션에 대한 자세한 정보는 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
JoseLinares

1
@JoseLinares 안녕하세요,이 링크를 다시 작성해 주셔서 감사합니다. 방금 첫 번째 인수를 건너 뛸 수 있고 IE10은 더 이상 관련이 없기 때문에 일반적인 시나리오에 대한 솔루션을보다 매력적으로 만들기 위해 답변을 개선하기로 결정했습니다. 이를 염두에두고 귀하의 링크를 답변에 포함 시켰습니다.
Martin Braun

@ modiX, 죄송합니다. 코드에서 실수 였고 설명이 잘못되었습니다. 예 로케일 (첫 번째 변수)은 선택 사항 입니다.
Kanhaiya lal

@Kanhaiyalal 걱정하지 마십시오. 실수가 발생할 수 있습니다. 나는 3 명의 평가자 중 2 명도 잘못된 편집을 승인 한 것에 놀랐습니다.
Martin Braun

51

"str_pad"함수를 정의 할 수 있습니다 (php에서와 같이).

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

9
"00"대신 "0"이면 충분
David Fregoli

최고의 답변.
Lucas Andrade

30

미래의 사람들을 위해 (ECMAScript 2017 이상)

해결책

"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

설명

String.prototype.padStart(targetLength[, padString])가능한 많은 추가 padString에서 String.prototype목표의 새로운 길이가되도록 타겟 targetLength.

"use strict"

let month = "9"

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

let byte = "00000100"

byte = byte.padStart(8, "0") // "00000100"

4
이것은 ES2017 또는 ES8의 일부입니다. 따라서 ES6 및 ES7의 일부가 아니기 때문에 "ES6 +"라고 말하는 것은 올바르지 않습니다.
Noel Llevares

1
.padStart(2, '0')TypeScript를 사용하지 않는 한 아마 중요하지는 않지만 두 번째 매개 변수는 문자열이기 때문에 기술적으로 중요합니다.
bmaupin

당신은 맞습니다, 나는 대답을 편집 할 것입니다.
Amin NAIRI

11
Number.prototype.padZero= function(len){
 var s= String(this), c= '0';
 len= len || 2;
 while(s.length < len) s= c + s;
 return s;
}

//사용:

(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
*/

10

나는 이것을하는 짧은 방법을 발견했다.

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

모든 외로운 단일 숫자에 선행 0을 추가합니다.


나는이 솔루션을 좋아한다. 어쩌면 어떤 일이 일어날 수 있습니까?
Gobliins

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

5

삼항 연산자를 사용하여 날짜를 "if"문처럼 형식화 할 수 있습니다.

예를 들면 다음과 같습니다.

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

그래서

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

getDate ()가 10보다 작은 값을 반환하면 '0'+ 날짜를 반환하거나 10보다 큰 경우 날짜를 반환하는 if 문과 비슷합니다. 0). 그 달도 마찬가지입니다.

편집 : getMonth가 0으로 시작한다는 것을 잊었으므로 +1을 추가하여 설명하십시오. 물론 d.getMonth () <9 :라고 말할 수도 있지만 +1을 사용하면 더 쉽게 이해할 수 있다고 생각했습니다.


+1을 설명해 주셔서 감사합니다
Bryan A

5

sliceJavaScript 에서이 문제를 해결하는 또 다른 방법이 있습니다 .

var d = new Date();
var datestring = d.getFullYear() + "-" + ("0"+(d.getMonth()+1)).slice(-2) +"-"+("0" + d.getDate()).slice(-2);

datestring예상대로 형식 의 반환 날짜 : 2019-09-01

또 다른 접근법은 dateformat라이브러리를 사용하는 것입니다 : https://github.com/felixge/node-dateformat


"JavaScript"철자를주의하십시오.
Basil Bourque

3

인생을 편하게하고 샘플 코드를 Moment.js를 사용 하십시오 .

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

// Now will print 30-06-2015 17:55
console.log(beginDateTime);

4
moment.js-> 0.3k 크기의 솔루션에 비해 19.8k 코드의 bcos는 좋은 솔루션이 아닙니다.
MarcoZen

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

날짜를 형식화하기위한 매개 변수로 옵션을 제공 할 수 있습니다. 첫 번째 매개 변수는 필요하지 않은 로케일 용이고 두 번째 매개 변수는 옵션 용입니다. 자세한 내용은 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));

1
제안 해 주셔서 감사합니다.
MJ55

2

여러 개의 선행 0을 추가 할 수 있지만 기본적으로 1 0을 추가하는 함수 에이 질문에 대한 정답을 래핑했습니다.

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

숫자 만 사용하고 2 자리 이하의 숫자로 작업하는 경우에도 접근 방식입니다.

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

1

내장 함수를 사용하여 패딩을 수행하는 또 다른 옵션 (그러나 코드가 너무 길어집니다!) :

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

// '12/06/2017'

그리고 정규 표현식으로 문자열을 조작하는 또 다른 방법은 다음과 같습니다.

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

// '2017/06/12'

그러나 시작일끝날이 표시 됩니다.


이것을 가장 좋아했습니다 : myDate.getDate (). toLocaleString ( 'en-US', {minimumIntegerDigits : 2})
Max Alexander Hanna

1

@ modiX 답변에 추가하면 이것이 작동합니다 ... 빈 상태로 두지 마십시오

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

1

다음은이 상황을 처리하는 방법에 대한 간단한 예입니다.

var mydate = new Date();

var month = (mydate.getMonth().toString().length < 2 ? "0"+mydate.getMonth().toString() :mydate.getMonth());

var date = (mydate.getDate().toString().length < 2 ? "0"+mydate.getDate().toString() :mydate.getDate());

var year = mydate.getFullYear();

console.log("Format Y-m-d : ",year+"-"+month+"-" + date);

console.log("Format Y/m/d : ",year+"/"+month+"/" + date);


0

다음은 구성을 추출하고 연결하여 Date.protoype구성을 적용하는 것입니다.

Array시간 덩어리를 저장 하는 데 사용 push() this했으며 Date객체 로 사용할 때 반복 할 길이를 반환합니다. 끝나면, 내가 사용할 수있는 joinreturn값입니다.

이것은 매우 빠르게 작동하는 것 같습니다 : 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();

데모 : http://jsfiddle.net/tive/U4MZ3/


0

내가 할 일은 다음과 같은 나만의 맞춤 날짜 도우미를 만드는 것입니다.

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

( 이 바이올린 참조 )


0

필요한 경우 앞에 0을 허용하는 패딩을 추가하고 선택한 구분 기호를 문자열로 사용하여 연결하십시오.

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

@John Henckel이 제안 했듯이 toISOString () 메서드를 사용하면 작업이 쉬워집니다.

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

시도한 내용을 간단히 설명 할 수도 있습니다.
Shiv Kumar Baghel

0

라이브러리가 필요없는 기본 기능으로 시도하십시오.

Date.prototype.CustomformatDate = function() {
 var tmp = new Date(this.valueOf());
 var mm = tmp.getMonth() + 1;
 if (mm < 10) mm = "0" + mm;
 var dd = tmp.getDate();
 if (dd < 10) dd = "0" + dd;
 return mm + "/" + dd + "/" + tmp.getFullYear();
};

0
function pad(value) {
    return value.tostring().padstart(2, 0);
}

let d = new date();
console.log(d);
console.log(`${d.getfullyear()}-${pad(d.getmonth() + 1)}-${pad(d.getdate())}t${pad(d.gethours())}:${pad(d.getminutes())}:${pad(d.getseconds())}`);

2
이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법 및 / 또는 이유에 대한 추가 컨텍스트를 제공하면 답변의 장기적인 가치가 향상됩니다.
레오 팔

0

String.slice () 를 사용 하면 문자열의 섹션을 추출하여 원래 문자열을 수정하지 않고 새 문자열로 반환 할 수 있습니다.

const currentDate = new Date().toISOString().slice(0, 10) // 2020-04-16

또는 Moment.js 와 같은 lib 를 사용하여 날짜 형식 을 지정할 수도 있습니다 .

const moment = require("moment")
const currentDate = moment().format("YYYY-MM-DD") // 2020-04-16
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.