Programming

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

procodes 2020. 2. 23. 12:04
반응형

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


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;

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


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

다음은 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

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

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

이를위한 새로운 현대적인 방법은을 사용 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 이하 버전은 옵션 인수를 이해하지 못합니다.


미래의 사람들을 위해 (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"

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

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

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

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

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


삼항 연산자를 사용하여 날짜를 "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'+ Date를 반환하거나 10보다 큰 경우 날짜를 반환하는 if 문과 비슷합니다. 0). 그 달도 마찬가지입니다.

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


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

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

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

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

여러 개의 선행 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
  }

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

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


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

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'

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


다음은 구성을 추출하고 연결하여 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/


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

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을 허용하는 패딩을 추가하고 선택한 구분 기호를 문자열로 사용하여 연결하십시오.

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

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


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

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

 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
  }

라이브러리가 필요없는 기본 기능을 위해 이것을 시도하십시오.

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

참고 URL : https://stackoverflow.com/questions/3605214/javascript-add-leading-zeroes-to-date



반응형