수색…


통사론

  • 새 날짜 ();
  • 새로운 날짜 (값);
  • 새 날짜 (dateAsString);
  • 새로운 날짜 (년, 월 [, 일 [, 시간 [, 분 [, 초 [밀리 초]]]]);

매개 변수

매개 변수 세부
value 1970 년 1 월 1 일 00 : 00 : 00.000 UTC (Unix epoch) 이후의 밀리 초 수
dateAsString 문자열 형식의 날짜 (자세한 내용은 예제 참조)
year 날짜의 연도 값입니다. month 또한 제공되어야하며 값은 밀리 초 단위로 해석됩니다. 또한 0 에서 99 사이의 값은 특별한 의미를가집니다. 예제를 참조하십시오.
month 0-11 범위의 월입니다. 이 매개 변수와 다음 매개 변수에 지정된 범위를 벗어나는 값을 사용하면 오류가 발생하지 않고 결과 날짜가 다음 값으로 "롤오버"하게됩니다. 예제를 참조하십시오.
day 선택 사항 : 날짜는 1-31 범위입니다.
hour 선택 사항 : 시간 ( 0-23 범위).
minute 선택 사항 : 분 ( 0-59 범위).
second 선택 사항 : 두 번째는 0-59 범위입니다.
millisecond 선택 사항 : 밀리 초 ( 0-999 범위).

현재 시간 및 날짜 가져 오기

new Date() 를 사용하여 현재 날짜와 시간을 포함하는 새 Date 객체를 생성합니다.

참고 Date() 인수없이 호출하는 것은 동일합니다 new Date(Date.now()) .

날짜 객체가 있으면 사용 가능한 여러 메소드 중 하나를 적용하여 속성을 추출 할 수 있습니다 (예 : getFullYear() ).

다음은 일반적인 날짜 방법 중 일부입니다.

현재 연도 가져 오기

var year = (new Date()).getFullYear();
console.log(year);
// Sample output: 2016 

현재 달 가져 오기

var month = (new Date()).getMonth();
console.log(month);
// Sample output: 0 

0 = 1 월입니다. 달의 범위는 0 에서 11 까지이므로 색인에 +1 을 추가하는 것이 좋습니다.

현재 날짜 가져 오기

var day = (new Date()).getDate();
console.log(day);
// Sample output: 31

현재 시간 가져 오기

var hours = (new Date()).getHours();
console.log(hours);
// Sample output: 10

현재 분 가져 오기

var minutes = (new Date()).getMinutes();
console.log(minutes);
// Sample output: 39

현재 초 가져 오기

var seconds = (new Date()).getSeconds();
console.log(second);
// Sample output: 48

현재 밀리 초 가져 오기

Date 객체의 인스턴스의 밀리 초 (0에서 999까지)를 가져 오려면 getMilliseconds 메서드를 사용합니다.

var milliseconds = (new Date()).getMilliseconds();
console.log(milliseconds);
 // Output: milliseconds right now

현재 시간과 날짜를 사람이 읽을 수있는 문자열로 변환합니다.

var now = new Date();
// convert date to a string in UTC timezone format:
console.log(now.toUTCString());
// Output: Wed, 21 Jun 2017 09:13:01 GMT

정적 메서드 Date.now() 는 1970 년 1 월 1 일 00:00:00 UTC 이후로 경과 된 밀리 초 수를 반환합니다. Date 객체의 인스턴스를 사용하여 그 시간 이후로 경과 된 밀리 초 수를 가져 오려면 해당 getTime 메서드를 사용합니다.

// get milliseconds using static method now of Date
console.log(Date.now());

// get milliseconds using method getTime of Date instance
console.log((new Date()).getTime());

새 Date 객체 만들기

Date 객체를 만들려면 Date() 생성자를 사용합니다.

  • 인수가없는

    Date() 는 현재 시간 (최대 밀리 초)과 날짜를 포함하는 Date 인스턴스를 만듭니다.

  • 하나의 정수 인수

    Date(m) 는 Epoch 시간 (1970 년 1 월 1 일)에 m 밀리 초를 더한 시간과 Date 를 포함하는 Date 인스턴스를 만듭니다. 예 : new Date(749019369738) 는 날짜 Sun, 26 Sep 1993 04:56:09 GMT를 제공 합니다.

  • 문자열 인수 사용

    Date(dateString)dateStringDate.parse 파싱 ​​한 후 결과로 나오는 Date 객체를 반환합니다.

  • 둘 이상의 정수 인수가있는

    Date(i1, i2, i3, i4, i5, i6) 는 년, 월, 일,시, 분, 초, 밀리 초로 인수를 읽고 해당 Date 객체를 인스턴스화합니다. 달은 0에서 JavaScript로 인덱싱되므로 0은 1 월을 의미하고 11은 11 월을 의미합니다. 예 : new Date(2017, 5, 1)2017 년 6 월 1 일을 제공합니다.


날짜 탐색

이 예제는 코드에서 알 수 있듯이 미국 중부 표준 시간대 (Central Time Zone)의 일광 절약 시간제 브라우저에서 생성되었습니다. UTC와의 비교가 Date.prototype.toISOString() 경우 Date.prototype.toISOString() 을 사용하여 날짜와 시간을 UTC로 나타 Date.prototype.toISOString() 형식이 지정된 문자열의 Z는 UTC를 나타냄).

// Creates a Date object with the current date and time from the 
// user's browser
var now = new Date();
now.toString() === 'Mon Apr 11 2016 16:10:41 GMT-0500 (Central Daylight Time)' 
// true
// well, at the time of this writing, anyway

// Creates a Date object at the Unix Epoch (i.e., '1970-01-01T00:00:00.000Z')
var epoch = new Date(0);
epoch.toISOString() === '1970-01-01T00:00:00.000Z' // true

// Creates a Date object with the date and time 2,012 milliseconds 
// after the Unix Epoch (i.e., '1970-01-01T00:00:02.012Z').
var ms = new Date(2012); 
date2012.toISOString() === '1970-01-01T00:00:02.012Z' // true

// Creates a Date object with the first day of February of the year 2012 
// in the local timezone.
var one = new Date(2012, 1);
one.toString() === 'Wed Feb 01 2012 00:00:00 GMT-0600 (Central Standard Time)' 
// true

// Creates a Date object with the first day of the year 2012 in the local 
// timezone.
// (Months are zero-based) 
var zero = new Date(2012, 0);
zero.toString() === 'Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)' 
// true

// Creates a Date object with the first day of the year 2012, in UTC.
var utc = new Date(Date.UTC(2012, 0));
utc.toString() === 'Sat Dec 31 2011 18:00:00 GMT-0600 (Central Standard Time)'
// true
utc.toISOString() === '2012-01-01T00:00:00.000Z'
// true

// Parses a string into a Date object (ISO 8601 format added in ECMAScript 5.1)
// Implementations should assumed UTC because of ISO 8601 format and Z designation
var iso = new Date('2012-01-01T00:00:00.000Z');
iso.toISOString() === '2012-01-01T00:00:00.000Z' // true

// Parses a string into a Date object (RFC in JavaScript 1.0)
var local = new Date('Sun, 01 Jan 2012 00:00:00 -0600');
local.toString() === 'Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)'
// true

// Parses a string in no particular format, most of the time. Note that parsing
// logic in these cases is very implementation-dependent, and therefore can vary
// across browsers and versions.
var anything = new Date('11/12/2012'); 
anything.toString() === 'Mon Nov 12 2012 00:00:00 GMT-0600 (Central Standard Time)'
// true, in Chrome 49 64-bit on Windows 10 in the en-US locale. Other versions in 
// other locales may get a different result.

// Rolls values outside of a specified range to the next value.
var rollover = new Date(2012, 12, 32, 25, 62, 62, 1023);
rollover.toString() === 'Sat Feb 02 2013 02:03:03 GMT-0600 (Central Standard Time)'
// true; note that the month rolled over to Feb; first the month rolled over to 
// Jan based on the month 12 (11 being December), then again because of the day 32
// (January having 31 days).

// Special dates for years in the range 0-99
var special1 = new Date(12, 0);
special1.toString() === 'Mon Jan 01 1912 00:00:00 GMT-0600 (Central Standard Time)`
// true

// If you actually wanted to set the year to the year 12 CE, you'd need to use the
// setFullYear() method:
special1.setFullYear(12);
special1.toString() === 'Sun Jan 01   12 00:00:00 GMT-0600 (Central Standard Time)`
// true

JSON으로 변환

var date1 = new Date();
date1.toJSON();

반환 : "2016-04-14T23 : 49 : 08.596Z"

UTC에서 날짜 만들기

기본적으로 Date 객체는 현지 시간으로 만들어집니다. 동일한 시간대에 있지 않은 서버와 클라이언트 사이의 날짜를 통신 할 때와 같이 항상 바람직한 것은 아닙니다. 이 시나리오에서는 날짜가 로컬 시간으로 표시되어야 할 때까지 시간대를 전혀 염려하지 않으려 고합니다.

문제

이 문제에서 우리는 특정 날짜 (일, 월, 년)를 다른 시간대에있는 사람과 통신하려고합니다. 첫 번째 구현에서는 순식간에 현지 시간을 사용하므로 잘못된 결과가 발생합니다. 두 번째 구현에서는 필요하지 않은 시간대를 피하기 위해 UTC 날짜를 사용합니다.

잘못된 결과로의 순진한 접근

function formatDate(dayOfWeek, day, month, year) {
  var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  return daysOfWeek[dayOfWeek] + " " + months[month] + " " + day + " " + year;
}

//Foo lives in a country with timezone GMT + 1
var birthday = new Date(2000,0,1);
console.log("Foo was born on: " + formatDate(birthday.getDay(), birthday.getDate(),
      birthday.getMonth(), birthday.getFullYear()));

sendToBar(birthday.getTime());

샘플 출력 : Foo was born on: Sat Jan 1 2000

//Meanwhile somewhere else...

//Bar lives in a country with timezone GMT - 1
var birthday = new Date(receiveFromFoo());
console.log("Foo was born on: " + formatDate(birthday.getDay(), birthday.getDate(),
      birthday.getMonth(), birthday.getFullYear()));

샘플 출력 : Foo was born on: Fri Dec 31 1999

그리고 Bar는 Foo가 1999 년 마지막 날에 태어났다고 항상 믿을 것입니다.

올바른 접근법

function formatDate(dayOfWeek, day, month, year) {
  var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  return daysOfWeek[dayOfWeek] + " " + months[month] + " " + day + " " + year;
}

//Foo lives in a country with timezone GMT + 1
var birthday = new Date(Date.UTC(2000,0,1));
console.log("Foo was born on: " + formatDate(birthday.getUTCDay(), birthday.getUTCDate(),
      birthday.getUTCMonth(), birthday.getUTCFullYear()));

sendToBar(birthday.getTime());

샘플 출력 : Foo was born on: Sat Jan 1 2000

//Meanwhile somewhere else...

//Bar lives in a country with timezone GMT - 1
var birthday = new Date(receiveFromFoo());
console.log("Foo was born on: " + formatDate(birthday.getUTCDay(), birthday.getUTCDate(), 
      birthday.getUTCMonth(), birthday.getUTCFullYear()));

샘플 출력 : Foo was born on: Sat Jan 1 2000

UTC에서 날짜 만들기

UTC 또는 GMT를 기반으로 Date 객체를 만들려면 Date.UTC(...) 메서드를 사용할 수 있습니다. 가장 긴 Date 생성자와 동일한 인수를 사용합니다. 이 메서드는 1970 년 1 월 1 일 00:00:00 UTC 이후 경과 한 시간을 나타내는 숫자를 반환합니다.

console.log(Date.UTC(2000,0,31,12));

샘플 출력 : 949320000000

var utcDate = new Date(Date.UTC(2000,0,31,12));
console.log(utcDate);

샘플 출력 : Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))

당연히 UTC 시간과 현지 시간의 차이는 실제로 시간대 오프셋이 밀리 초로 변환 된 것입니다.

var utcDate = new Date(Date.UTC(2000,0,31,12));
var localDate = new Date(2000,0,31,12);

console.log(localDate - utcDate === utcDate.getTimezoneOffset() * 60 * 1000);

샘플 출력 : true

Date 객체 변경

setDate(...)setFullYear(...) setDate(...) 와 같은 모든 Date 객체 수정 자에는 현지 시간이 아닌 UTC 시간의 인수가 사용됩니다.

var date = new Date();
date.setUTCFullYear(2000,0,31);
date.setUTCHours(12,0,0,0);
console.log(date);

샘플 출력 : Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))

다른 UTC 관련 수정자는 .setUTCMonth() , .setUTCDate() (매월), .setUTCMinutes() , .setUTCSeconds().setUTCMilliseconds() 입니다.

getTime () 및 setTime ()을 사용하여 모호함을 피하십시오.

위의 방법으로 날짜의 모호성을 구분해야하는 경우 일반적으로 1970 년 1 월 1 일 00:00:00 UTC 이후로 경과 한 시간으로 날짜를 전달하는 것이 더 쉽습니다. 이 단일 번호는 단일 시점을 나타내며 필요할 때마다 현지 시간으로 변환 할 수 있습니다.

var date = new Date(Date.UTC(2000,0,31,12));
var timestamp = date.getTime();
//Alternatively
var timestamp2 = Date.UTC(2000,0,31,12);
console.log(timestamp === timestamp2);

샘플 출력 : true

//And when constructing a date from it elsewhere...
var otherDate = new Date(timestamp);

//Represented as an universal date
console.log(otherDate.toUTCString());
//Represented as a local date
console.log(otherDate);

샘플 출력 :

Mon, 31 Jan 2000 12:00:00 GMT
Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))

문자열 형식으로 변환

문자열로 변환

var date1 = new Date();
date1.toString();

반환 : '2015 년 4 월 15 일 금요일 07:48:48 GMT-0400 (동부 일광 절약 시간제)'


시간 문자열로 변환

var date1 = new Date();
date1.toTimeString();

반환 : "07:48:48 GMT-0400 (동부 일광 절약 시간제)"


날짜 문자열로 변환

var date1 = new Date();
date1.toDateString();

반환 : "Thu Apr 14 1416"


UTC 문자열로 변환

var date1 = new Date();
date1.toUTCString();

반환 : "Fri, 2016 년 4 월 15 일 11:48:48 GMT"


ISO 문자열로 변환

var date1 = new Date();
date1.toISOString();

반환 : "2016-04-14T23 : 49 : 08.596Z"


GMT 문자열로 변환

var date1 = new Date();
date1.toGMTString();

반환 : "목, 2014 년 4 월 14 일 23:49:08 GMT"

일부 브라우저는 장래에이 기능을 지원하지 않을 수 있으므로이 기능은 더 이상 사용되지 않는 것으로 표시되었습니다. 대신에 toUTCString ()을 사용하는 것이 좋습니다.


로케일 날짜 문자열로 변환

var date1 = new Date();
date1.toLocaleDateString();

반환 : '2014 년 4 월 14 일'

이 함수는 기본적으로 사용자의 위치에 따라 로캘 구분 날짜 문자열을 반환합니다.

date1.toLocaleDateString([locales [, options]])

특정 로케일을 제공하는 데 사용할 수 있지만 브라우저 구현에 따라 다릅니다. 예를 들어,

date1.toLocaleDateString(["zh", "en-US"]);

미국 영어를 대체 언어로 사용하여 중국어 로켈에서 문자열을 인쇄하려고 시도합니다. options 매개 변수를 사용하여 특정 형식을 지정할 수 있습니다. 예 :

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
date1.toLocaleDateString([], options);

결과는

"2016 년 4 월 14 일 목요일"

자세한 내용 은 MDN 을 참조하십시오.

Date 객체 늘리기

Javascript에서 날짜 객체를 증가 시키려면 일반적으로 다음과 같이 할 수 있습니다.

var checkoutDate = new Date();    // Thu Jul 21 2016 10:05:13 GMT-0400 (EDT)

checkoutDate.setDate( checkoutDate.getDate() + 1 );

console.log(checkoutDate); // Fri Jul 22 2016 10:05:13 GMT-0400 (EDT)

setDate 를 사용하면 현재 달의 일 수보다 큰 값을 사용하여 다음 달의 날짜로 날짜를 변경할 수 있습니다.

var checkoutDate = new Date();    // Thu Jul 21 2016 10:05:13 GMT-0400 (EDT)
checkoutDate.setDate( checkoutDate.getDate() + 12 );
console.log(checkoutDate); // Tue Aug 02 2016 10:05:13 GMT-0400 (EDT)

getHours (), getMonth () 등과 같은 다른 메소드에도 동일하게 적용됩니다.

근무일 추가

작업 일을 추가하려면 (이 경우 나는 월요일 - 금요일이라고 가정 함) setDate 함수를 사용할 수 있지만 주말을 설명하기위한 약간의 논리가 필요합니다 (분명히 공휴일을 고려하지 않음) -

function addWorkDays(startDate, days) {
    // Get the day of the week as a number (0 = Sunday, 1 = Monday, .... 6 = Saturday)
    var dow = startDate.getDay();
    var daysToAdd = days;
    // If the current day is Sunday add one day
    if (dow == 0)
        daysToAdd++;
    // If the start date plus the additional days falls on or after the closest Saturday calculate weekends
    if (dow + daysToAdd >= 6) {
        //Subtract days in current working week from work days
        var remainingWorkDays = daysToAdd - (5 - dow);
        //Add current working week's weekend
        daysToAdd += 2;
        if (remainingWorkDays > 5) {
            //Add two days for each working week by calculating how many weeks are included
            daysToAdd += 2 * Math.floor(remainingWorkDays / 5);
            //Exclude final weekend if remainingWorkDays resolves to an exact number of weeks
            if (remainingWorkDays % 5 == 0)
                daysToAdd -= 2;
        }
    }
    startDate.setDate(startDate.getDate() + daysToAdd);
    return startDate;
}

1970 년 1 월 1 일 이후 경과 한 밀리 초 수를 가져옵니다. 00:00:00 UTC

정적 메서드 Date.now 는 1970 년 1 월 1 일 00:00:00 UTC 이후로 경과 된 밀리 초 수를 반환합니다. Date 객체의 인스턴스를 사용하여 그 시간 이후로 경과 된 밀리 초 수를 가져 오려면 해당 getTime 메서드를 사용합니다.

// get milliseconds using static method now of Date
console.log(Date.now());

// get milliseconds using method getTime of Date instance
console.log((new Date()).getTime());

JavaScript 날짜 포맷

최신 브라우저에서 JavaScript 날짜 포맷하기

최신 브라우저 (*)에서 Date.prototype.toLocaleDateString() 사용하면 편리한 방식으로 Date 의 서식을 정의 할 수 있습니다.

다음 형식이 필요합니다.

dateObj.toLocaleDateString([locales [, options]])

locales 매개 변수는 BCP 47 언어 태그가있는 문자열이거나 이러한 문자열의 배열이어야합니다.

options 매개 변수는 다음 속성 중 일부 또는 전부를 갖는 객체 여야합니다.

  • localeMatcher : 가능한 값은 "lookup""best fit" . 기본값은 "best fit"
  • timeZone : 구현이 인식해야하는 유일한 값은 "UTC" . 기본값은 런타임의 기본 시간대입니다.
  • hour12 : 가능한 값은 truefalse . 디폴트는 로케일에 의존합니다.
  • formatMatcher : 가능한 값은 "basic""best fit" . 기본값은 "best fit"
  • 평일 : 가능한 값은 "narrow" , "short" & "long"
  • 시대 : 가능한 값은 "narrow" , "short" & "long"
  • : 가능한 값은 "numeric" & "2-digit"
  • month : 가능한 값은 "numeric" , "2-digit" , "narrow" , "short" & "long"
  • : 가능한 값은 "numeric" & "2-digit"
  • 시간 : 가능한 값은 "numeric" & "2-digit"
  • : 가능한 값은 "numeric" & "2-digit"
  • 두 번째 : 가능한 값은 "numeric" & "2-digit"
  • timeZoneName : 가능한 값은 "short""long"

사용하는 방법

var today = new Date().toLocaleDateString('en-GB', {  
    day : 'numeric',
    month : 'short',
    year : 'numeric'
});

1 월 24 일에 실행하면 출력됩니다. 24ᵗʰ, 2036 :

'24 Jan 2036'

맞춤 설정하기

Date.prototype.toLocaleDateString() 이 필요한만큼 수행 할 수있을만큼 융통성이없는 경우 다음과 같은 사용자 정의 Date 객체를 만드는 것이 좋습니다.

var DateObject = (function() {
    var monthNames = [
      "January", "February", "March",
      "April", "May", "June", "July",
      "August", "September", "October",
      "November", "December"
    ];
    var date = function(str) {
        this.set(str);
    };
    date.prototype = {
        set : function(str) {
            var dateDef = str ? new Date(str) : new Date();
            this.day = dateDef.getDate();
            this.dayPadded = (this.day < 10) ? ("0" + this.day) : "" + this.day;
            this.month = dateDef.getMonth() + 1;
            this.monthPadded = (this.month < 10) ? ("0" + this.month) : "" + this.month;
            this.monthName = monthNames[this.month - 1];
            this.year = dateDef.getFullYear();
        },
        get : function(properties, separator) {
            var separator = separator ? separator : '-'
                ret = [];
            for(var i in properties) {
                ret.push(this[properties[i]]);
            }
            return ret.join(separator);
        }
    };
    return date;
})();

이 코드를 포함하고 2019 년 1 월 20 일에 new DateObject() 를 실행하면 다음과 같은 속성을 가진 객체가 생성됩니다.

day: 20
dayPadded: "20"
month: 1
monthPadded: "01"
monthName: "January"
year: 2019

형식화 된 문자열을 얻으려면 다음과 같이 할 수 있습니다.

new DateObject().get(['dayPadded', 'monthPadded', 'year']);

그러면 다음과 같은 출력이 생성됩니다.

20-01-2016

(*) MDN에 따르면 "최신 브라우저"는 Chrome 24+, Firefox 29+, IE11, Edge12 +, Opera 15+ 및 Safari 야간 빌드를 의미합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow