PHP와 같이 JavaScript로 연중 주당 받기


140

PHP와 같이 올해의 현재 주 번호를 어떻게 얻 date('W')습니까?

월요일부터 시작하여 주 단위로 ISO-8601 주 수 여야합니다 .


1
<a href=" javascript.about.com/library/blweekyear.htm "> <b> 여기 </ b> </a>를 참조하십시오. 이것은 'javascript week of year'를 Google 검색했을 때 처음으로 제공되는 링크였습니다.
피트 윌슨

롤 +1! 그것은 내가 스 니펫을 얻은 곳이지만 얼마 전에 얻은 소스를 기억할 수 없었습니다.
Tom Chantler

@Pete :이 코드는 현재 주로 22를 얻습니다. 21시
PeeHaa

@Pete : : D Nopez 간단한 -1은 속임수를 쓰지 않을 것입니다 : P ISO-8601 주수를 얻지 못할 것입니다. ISO-8601의 주일은 월요일에 시작됩니다. 첫주는 그 해의 첫 번째 목요일이있는 주입니다. en.wikipedia.org/wiki/ISO-8601 . PS는 당신을 억압 한 사람이 아니 었습니다.
PeeHaa

답변:


276

http://www.merlyn.demon.co.uk/js-date6.htm#YWD에서 원하는 것을 얻을 수 있어야합니다 .

같은 사이트에서 더 좋은 링크입니다 : 주 작업 .

편집하다

다음은 제공된 링크와 Dommer가 게시 한 링크를 기반으로하는 코드입니다. http://www.merlyn.demon.co.uk/js-date6.htm#YWD의 결과에 대해 가볍게 테스트되었습니다 . 제공되는 보장없이 철저히 테스트하십시오.

2017 년 편집

일광 절약 시간이 준수되는 기간 및 1 월 1 일이 금요일 인 날짜에 문제가있었습니다. 모든 UTC 메소드를 사용하여 수정했습니다. 다음은 Moment.js에 동일한 결과를 반환합니다.

/* For a given date, get the ISO week number
 *
 * Based on information at:
 *
 *    http://www.merlyn.demon.co.uk/weekcalc.htm#WNR
 *
 * Algorithm is to find nearest thursday, it's year
 * is the year of the week number. Then get weeks
 * between that date and the first day of that year.
 *
 * Note that dates in one year can be weeks of previous
 * or next year, overlap is up to 3 days.
 *
 * e.g. 2014/12/29 is Monday in week  1 of 2015
 *      2012/1/1   is Sunday in week 52 of 2011
 */
function getWeekNumber(d) {
    // Copy date so don't modify original
    d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
    // Set to nearest Thursday: current date + 4 - current day number
    // Make Sunday's day number 7
    d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
    // Get first day of year
    var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
    // Calculate full weeks to nearest Thursday
    var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
    // Return array of year and week number
    return [d.getUTCFullYear(), weekNo];
}

var result = getWeekNumber(new Date());
document.write('It\'s currently week ' + result[1] + ' of ' + result[0]);

"UTC"날짜를 만들 때 시간은 0입니다.

최소화 된 프로토 타입 버전 (주 번호 만 반환) :

Date.prototype.getWeekNumber = function(){
  var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
  var dayNum = d.getUTCDay() || 7;
  d.setUTCDate(d.getUTCDate() + 4 - dayNum);
  var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
  return Math.ceil((((d - yearStart) / 86400000) + 1)/7)
};

document.write('The current ISO week number is ' + new Date().getWeekNumber());

테스트 섹션

이 섹션에서는 YYYY-MM-DD 형식으로 날짜를 입력하고이 코드가 Moment.js ISO 주 번호 (2000 년에서 2050 년까지 50 년 이상 테스트 됨)와 동일한 주 번호를 제공하는지 확인할 수 있습니다.

Date.prototype.getWeekNumber = function(){
  var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
  var dayNum = d.getUTCDay() || 7;
  d.setUTCDate(d.getUTCDate() + 4 - dayNum);
  var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
  return Math.ceil((((d - yearStart) / 86400000) + 1)/7)
};

function checkWeek() {
  var s = document.getElementById('dString').value;
  var m = moment(s, 'YYYY-MM-DD');
  document.getElementById('momentWeek').value = m.format('W');
  document.getElementById('answerWeek').value = m.toDate().getWeekNumber();      
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

Enter date  YYYY-MM-DD: <input id="dString" value="2021-02-22">
<button onclick="checkWeek(this)">Check week number</button><br>
Moment: <input id="momentWeek" readonly><br>
Answer: <input id="answerWeek" readonly>


8
이 코드는 2011 년 1 월 2 일을 2010 년 53 주로 52 번째로 계산합니다. 이것은 원래 코드에서는 올바르게 작동하지만 사용자의 적응에서는 작동하지 않습니다.
Alasdair

4
내 엉덩이를 구했어 감사. 오픈 소스에 기여하고 싶다면 jQuery UI 메소드에 대한 패치 인 $ .datepicker.iso8601Week (date)를 작성하여 weekNo 만 반환하고 연도는 반환하지 않는 것이 좋습니다.
Christian

18
오늘 2016 년 1 월 4 일, 나는 추가해야 할 필요가 있음을 알았습니다. d.setMilliseconds(0)new date () 또는 new Date ( "1/4/2016") 사용 여부에 따라 같은 날짜의 다른 주 번호가 계속 표시되었습니다. 똑같은 경험을 할 수있는 다른 사람들을 위해 앞서가는 것입니다.
Jacob Lauritzen

2
제공된 코드는 ISO 8601을 따르지 않는, 그것은 하나 꺼져
에릭 그레인

2
죄송합니다. 오타가 '2015-12-30'이어야합니다.
Ally


26

위에서 말했지만 클래스는 없습니다.

let now = new Date();
let onejan = new Date(now.getFullYear(), 0, 1);
week = Math.ceil( (((now - onejan) / 86400000) + onejan.getDay() + 1) / 7 );

4
원 얀탕! * ninja-roll *
CodeManX 2018 년

2
이것은 일년의 첫 주에도 정확한 주 번호를 가져 오는 유일한 답변입니다.
PrasadW

(now.getTime() - onejan.getTime())빌드 문제를 피하기 위해 참고하십시오 .
Swoox

4
질문은 이것을 무시하는 ISO 8601을 요구했습니다. 질문에 대한 답변으로 그것은 단순히 잘못입니다
havlock

23

적절하게 http://javascript.about.com/library/blweekyear.htm

Date.prototype.getWeek = function() {
    var onejan = new Date(this.getFullYear(),0,1);
    var millisecsInDay = 86400000;
    return Math.ceil((((this - onejan) /millisecsInDay) + onejan.getDay()+1)/7);
};

1
간결하지만 일요일을 요일의 첫 번째 요일로 취급하므로 2015 년 12 월 27 일 일요일은 주 52의 마지막 요일이 아닌 53의 첫 번째 요일입니다.
RobG

3
나는 이것이 프로토 타입에 추가되기 때문에 Date가 일요일을 첫날로 취급 할 때 기대할 것이라고 생각합니다.
Ed Sykes

일광 절약 시간에 문제가 없습니까? 여름에는 오전 1 시까지는 진행되지 않을 것이라고 생각합니다.
Hafthor

또한, 이것은 기술적으로 0 : 00 : 00.001까지 일주일 전진하지 않습니까? Math.floor를 사용하는 것이 더 낫습니까?
Hafthor

11

Jacob Wright의 Date.format()라이브러리는 PHP date()함수 스타일로 날짜 형식을 구현 하며 ISO-8601 주 번호를 지원합니다.

new Date().format('W');

일주일 동안 약간 과잉 일 수 있지만 PHP 스타일 형식을 지원하며 많은 작업을 수행하는 경우 매우 편리합니다.


빠른 해킹 된 스크립트를위한 좋은 솔루션 :)
Steen Schütt

6
getWeekOfYear: function(date) {
        var target = new Date(date.valueOf()),
            dayNumber = (date.getUTCDay() + 6) % 7,
            firstThursday;

        target.setUTCDate(target.getUTCDate() - dayNumber + 3);
        firstThursday = target.valueOf();
        target.setUTCMonth(0, 1);

        if (target.getUTCDay() !== 4) {
            target.setUTCMonth(0, 1 + ((4 - target.getUTCDay()) + 7) % 7);
        }

        return Math.ceil((firstThursday - target) /  (7 * 24 * 3600 * 1000)) + 1;
    }

다음 코드는 표준 시간대와 무관하며 (UTC 날짜 사용) https://en.wikipedia.org/wiki/ISO_8601 에 따라 작동합니다


4

Oracle의 사양에 설명 된 Java SE의 SimpleDateFormat 클래스가 유용하다는 것을 알았습니다 : http://goo.gl/7MbCh5 . 내 경우에는 Google Apps Script에서 다음과 같이 작동했습니다.

function getWeekNumber() {
  var weekNum = parseInt(Utilities.formatDate(new Date(), "GMT", "w"));
  Logger.log(weekNum);
}

예를 들어 스프레드 시트 매크로에서 파일의 실제 시간대를 검색 할 수 있습니다.

function getWeekNumber() {
  var weekNum = parseInt(Utilities.formatDate(new Date(), SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "w"));
  Logger.log(weekNum);
}

4

이것은 "getWeek"메소드를 Date.prototype에 추가하여 연초부터 주 수를 리턴합니다. 이 인수는 첫 번째 요일을 정의합니다. 인수가 전달되지 않으면 첫날은 일요일로 가정됩니다.

/**
 * Get week number in the year.
 * @param  {Integer} [weekStart=0]  First day of the week. 0-based. 0 for Sunday, 6 for Saturday.
 * @return {Integer}                0-based number of week.
 */
Date.prototype.getWeek = function(weekStart) {
    var januaryFirst = new Date(this.getFullYear(), 0, 1);
    if(weekStart !== undefined && (typeof weekStart !== 'number' || weekStart % 1 !== 0 || weekStart < 0 || weekStart > 6)) {
      throw new Error('Wrong argument. Must be an integer between 0 and 6.');
    }
    weekStart = weekStart || 0;
    return Math.floor((((this - januaryFirst) / 86400000) + januaryFirst.getDay() - weekStart) / 7);
};

1
2016 년 첫 번째주는 독일 에서 1 월 4 일에 시작되지만 함수는 1 월 1 일부터 0부터 다시 계산을 시작합니다. 또한, 연말에 잘못된 숫자를 반환 예 (52)가 이미 비록, 2018년 11월 31일 (53 주)에 대한 2019의 첫번째 달력 주 : new Date(Date.UTC(2018,11, 31)).getWeek(1)+1(월 독일에서 주 1 일)입니다.
CodeManX

그것이 의도 된 방식이며, 아마도 가장 유스 케이스입니다. 그렇지 않으면 2016 년의 첫 3 일은 빠질 것입니다. 매월 1 일은 해당 월의 첫 번째 주를 구성하는 것으로 간주됩니다. 기능이 다르게 작동해야하는 경우 필요에 따라 조정할 수 있습니다. 마찬가지로, 주가 주어진 연도와 다음 연도에 속하는 경우, 해당 연도의 마지막 주와 다음 해의 첫 주 (현재 논리에 따라)라고 할 수 있습니다.
Tigran

정보 주셔서 감사합니다. ISO8601 주 날짜를 올바르게 구현하는 RobG의 솔루션을 사용했습니다. (12 월의 마지막 날과 1 월의 첫 번째 날은 52, 53 또는 1 주일 수 있습니다.) en.m.wikipedia.org/wiki/ISO_week_date
CodeManX

4

주어진 날짜의 주 번호를 가져옵니다

function week(year,month,day) {
    function serial(days) { return 86400000*days; }
    function dateserial(year,month,day) { return (new Date(year,month-1,day).valueOf()); }
    function weekday(date) { return (new Date(date)).getDay()+1; }
    function yearserial(date) { return (new Date(date)).getFullYear(); }
    var date = year instanceof Date ? year.valueOf() : typeof year === "string" ? new Date(year).valueOf() : dateserial(year,month,day), 
        date2 = dateserial(yearserial(date - serial(weekday(date-serial(1))) + serial(4)),1,3);
    return ~~((date - date2 + serial(weekday(date2) + 5))/ serial(7));
}

console.log(
    week(2016, 06, 11),//23
    week(2015, 9, 26),//39
    week(2016, 1, 1),//53
    week(2016, 1, 4),//1
    week(new Date(2016, 0, 4)),//1
    week("11 january 2016")//2
);

1
믿을 수는 없지만이 기능은 항상 작동하는 유일한 기능입니다! 수락 된 답변은 일광 절약 시간이 지났을 때 재생되었으며 다른 사람들은 특정 연도의 주 번호로 '0'을 말했습니다. -일부는 전날 반환되는 UTC 함수에 의존하여 '53'또는 '54'주에 할당했습니다. 불행히도 나는 일요일에 시작하는 주가 필요 하며이 코드는 이해하기가 매우 어렵습니다 ...
Melissa Zachariadis

@MelissaZachariadis가 말했다 I need the week to begin on a Sunday; 나는에만 필요 변화가 S () '함수 평일에 생각 .getDay()+1으로 변경하기.getDay()
라파

4

아래 코드는 올바른 ISO 8601 주 번호를 계산합니다. date("W")매주 1/1/1970과 1/1/2100 사이 의 PHP와 일치 합니다.

/**
 * Get the ISO week date week number
 */
Date.prototype.getWeek = function () {
  // Create a copy of this date object
  var target = new Date(this.valueOf());

  // ISO week date weeks start on Monday, so correct the day number
  var dayNr = (this.getDay() + 6) % 7;

  // ISO 8601 states that week 1 is the week with the first Thursday of that year
  // Set the target date to the Thursday in the target week
  target.setDate(target.getDate() - dayNr + 3);

  // Store the millisecond value of the target date
  var firstThursday = target.valueOf();

  // Set the target to the first Thursday of the year
  // First, set the target to January 1st
  target.setMonth(0, 1);

  // Not a Thursday? Correct the date to the next Thursday
  if (target.getDay() !== 4) {
    target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
  }

  // The week number is the number of weeks between the first Thursday of the year
  // and the Thursday in the target week (604800000 = 7 * 24 * 3600 * 1000)
  return 1 + Math.ceil((firstThursday - target) / 604800000);
}

출처 : Taco van den Broek


프로토 타입을 확장하지 않는 경우 다음과 같은 기능이 있습니다.

function getWeek(date) {
  if (!(date instanceof Date)) date = new Date();

  // ISO week date weeks start on Monday, so correct the day number
  var nDay = (date.getDay() + 6) % 7;

  // ISO 8601 states that week 1 is the week with the first Thursday of that year
  // Set the target date to the Thursday in the target week
  date.setDate(date.getDate() - nDay + 3);

  // Store the millisecond value of the target date
  var n1stThursday = date.valueOf();

  // Set the target to the first Thursday of the year
  // First, set the target to January 1st
  date.setMonth(0, 1);

  // Not a Thursday? Correct the date to the next Thursday
  if (date.getDay() !== 4) {
    date.setMonth(0, 1 + ((4 - date.getDay()) + 7) % 7);
  }

  // The week number is the number of weeks between the first Thursday of the year
  // and the Thursday in the target week (604800000 = 7 * 24 * 3600 * 1000)
  return 1 + Math.ceil((n1stThursday - date) / 604800000);
}

샘플 사용법 :

getWeek(); // Returns 37 (or whatever the current week is)
getWeek(new Date('Jan 2, 2011')); // Returns 52
getWeek(new Date('Jan 1, 2016')); // Returns 53
getWeek(new Date('Jan 4, 2016')); // Returns 1

이 기능이 마음에 들지만 질문이 있습니다. 일요일로 되돌리려면 어떻게해야합니까? 나는 그 +6 ) % 7부분이 무엇인지 전혀 모른다 . 스크럽에서 감사합니다!
NoobishPro

1
@Babydead ISO주는 월요일에 getDay()시작 되지만 JavaScript 는 일요일에 시작되므로 일요일에 시작하려면 수정을 제거 할 수 있습니다.var nDay = date.getDay();
thdoan

주 번호를 얻는 8 가지 이상의 JS 구현을 시도했습니다. 이것은 작동하는 유일한 기능이지만 모든 getter 및 setter를 getUTC .. 및 setUTC로 변경 한 경우에만 사용할 수 있습니다. 이유를 모릅니다. 나는 이것을 테스트했다 : 2017-07-17T00 : 00 : 00.000Z (주 29) 2017-07-23T23 : 59 : 59.000Z (주 29) 2021-01-04T00 : 00 : 00.000Z (주 1)
psycho brm


2

나를 위해 아주 잘 작동하는 코드 스 니펫은 다음과 같습니다.

var yearStart = +new Date(d.getFullYear(), 0, 1);
var today = +new Date(d.getFullYear(),d.getMonth(),d.getDate());
var dayOfYear = ((today - yearStart + 1) / 86400000);
return Math.ceil(dayOfYear / 7).toString();

참고 :
d현재 주 번호를 원하는 내 날짜입니다.
+변환은 날짜를 숫자로 변환합니다 (TypeScript 사용).


1

JavaScript로 주 번호를 계산하는 구현은 다음과 같습니다. 여름과 겨울 시간 오프셋도 수정되었습니다. 나는이 기사에서주의 정의를 사용했다 : ISO 8601

주중은 월요일부터 일요일까지이며 1 월 4 일은 항상 연중 첫 주입니다.

// add get week prototype functions
// weeks always start from monday to sunday
// january 4th is always in the first week of the year
Date.prototype.getWeek = function () {
    year = this.getFullYear();
    var currentDotw = this.getWeekDay();
    if (this.getMonth() == 11 && this.getDate() - currentDotw > 28) {
        // if true, the week is part of next year 
        return this.getWeekForYear(year + 1);
    }
    if (this.getMonth() == 0 && this.getDate() + 6 - currentDotw < 4) {
        // if true, the week is part of previous year
        return this.getWeekForYear(year - 1);
    }
    return this.getWeekForYear(year);
}

// returns a zero based day, where monday = 0
// all weeks start with monday
Date.prototype.getWeekDay = function () {
    return  (this.getDay() + 6) % 7;
}

// corrected for summer/winter time
Date.prototype.getWeekForYear = function (year) {
    var currentDotw = this.getWeekDay();
    var fourjan = new Date(year, 0, 4);
    var firstDotw = fourjan.getWeekDay();
    var dayTotal = this.getDaysDifferenceCorrected(fourjan) // the difference in days between the two dates.
    // correct for the days of the week
    dayTotal += firstDotw; // the difference between the current date and the first monday of the first week, 
    dayTotal -= currentDotw; // the difference between the first monday and the current week's monday
    // day total should be a multiple of 7 now
    var weeknumber = dayTotal / 7 + 1; // add one since it gives a zero based week number.
    return weeknumber;
}

// corrected for timezones and offset
Date.prototype.getDaysDifferenceCorrected = function (other) {
    var millisecondsDifference = (this - other);
    // correct for offset difference. offsets are in minutes, the difference is in milliseconds
    millisecondsDifference += (other.getTimezoneOffset()- this.getTimezoneOffset()) * 60000;
    // return day total. 1 day is 86400000 milliseconds, floor the value to return only full days
    return Math.floor(millisecondsDifference / 86400000);
}

테스트를 위해 Qunit에서 다음 JavaScript 테스트를 사용했습니다.

var runweekcompare = function(result, expected) {
    equal(result, expected,'Week nr expected value: ' + expected + ' Actual value: ' + result);
}

test('first week number test', function () {
    expect(5);
    var temp = new Date(2016, 0, 4); // is the monday of the first week of the year
    runweekcompare(temp.getWeek(), 1);
    var temp = new Date(2016, 0, 4, 23, 50); // is the monday of the first week of the year
    runweekcompare(temp.getWeek(), 1);
    var temp = new Date(2016, 0, 10, 23, 50); // is the sunday of the first week of the year
    runweekcompare(temp.getWeek(), 1);
    var temp = new Date(2016, 0, 11, 23, 50); // is the second week of the year
    runweekcompare(temp.getWeek(), 2);
    var temp = new Date(2016, 1, 29, 23, 50); // is the 9th week of the year
    runweekcompare(temp.getWeek(), 9);
});

test('first day is part of last years last week', function () {
    expect(2);
    var temp = new Date(2016, 0, 1, 23, 50); // is the first last week of the previous year
    runweekcompare(temp.getWeek(), 53);
    var temp = new Date(2011, 0, 2, 23, 50); // is the first last week of the previous year
    runweekcompare(temp.getWeek(), 52);
});

test('last  day is part of next years first week', function () {
    var temp = new Date(2013, 11, 30); // is part of the first week of 2014
    runweekcompare(temp.getWeek(), 1);
});

test('summer winter time change', function () {
    expect(2);
    var temp = new Date(2000, 2, 26); 
    runweekcompare(temp.getWeek(), 12);
    var temp = new Date(2000, 2, 27); 
    runweekcompare(temp.getWeek(), 13);
});

test('full 20 year test', function () {
    //expect(20 * 12 * 28 * 2);
    for (i = 2000; i < 2020; i++) {
        for (month = 0; month < 12; month++) {
            for (day = 1; day < 29 ; day++) {
                var temp = new Date(i, month, day);
                var expectedweek = temp.getWeek();
                var temp2 = new Date(i, month, day, 23, 50);
                var resultweek = temp.getWeek();
                equal(expectedweek, Math.round(expectedweek), 'week number whole number expected ' + Math.round(expectedweek) + ' resulted week nr ' + expectedweek);
                equal(resultweek, expectedweek, 'Week nr expected value: ' + expectedweek + ' Actual value: ' + resultweek + ' for year ' + i + ' month ' + month + ' day ' + day);
            }
        }
    }
});

0

이번 주 가장 중요한 것은 a **에 큰 고통이었습니다. 인터넷 주위의 대부분의 스크립트는 저에게 효과적이지 않았습니다. 그들은 대부분의 시간을 일했지만 모두 연도가 바뀌고 연중 마지막 주가 갑자기 내년 첫 주 등이었던 시점에서 모두 깨졌습니다. Angular의 날짜 필터조차도 잘못된 데이터를 보여주었습니다 (내년 1 주째였습니다 53 주).

참고 : 예는 유럽 주 (월 첫째 주)와 함께 작동하도록 설계되었습니다!

getWeek ()

Date.prototype.getWeek = function(){

    // current week's Thursday
    var curWeek = new Date(this.getTime());
        curWeek.setDay(4);

    // Get year's first week's Thursday
    var firstWeek = new Date(curWeek.getFullYear(), 0, 4);
        firstWeek.setDay(4);

    return (curWeek.getDayIndex() - firstWeek.getDayIndex()) / 7 + 1;
};

setDay ()

/**
* Make a setDay() prototype for Date
* Sets week day for the date
*/
Date.prototype.setDay = function(day){

    // Get day and make Sunday to 7
    var weekDay = this.getDay() || 7;
    var distance = day - weekDay;
    this.setDate(this.getDate() + distance);

    return this;
}

getDayIndex ()

/*
* Returns index of given date (from Jan 1st)
*/

Date.prototype.getDayIndex = function(){
    var start = new Date(this.getFullYear(), 0, 0);
    var diff = this - start;
    var oneDay = 86400000;

    return Math.floor(diff / oneDay);
};

나는 이것을 테스트했는데 잘 작동하는 것 같지만 결함이 발견되면 알려주십시오.


0

weeknumber ISO 준수를 얻기 위해 가장 짧은 코드를 얻으려고 많은 노력을 기울였습니다.

Date.prototype.getWeek=function(){
    var date=new Date(this);
    date.setHours(0,0,0,0);
    return Math.round(((date.setDate(this.getDate()+2-(this.getDay()||7))-date.setMonth(0,4))/8.64e7+3+(date.getDay()||7))/7)+"/"+date.getFullYear();}

date원본을 변경하지 않으려면 변수 가 필요합니다 this. 나는의 반환 값을 사용 setDate()하고 setMonth()불필요 getTime()코드 길이를 저장하고 나는 하루에 대신 단일 요소의 곱셈 5 제로와 숫자의 밀리 초에 대한 expontial 수를 사용했다. this날짜 또는 밀리 초 수이며 반환 값은 String"49/2017"입니다.




0

ISO-8601에 맞게 조정 된 Angular2 + DatePipe에 대한 최단 해결 방법 :

import {DatePipe} from "@angular/common";

public rightWeekNum: number = 0;
  
constructor(private datePipe: DatePipe) { }
    
calcWeekOfTheYear(dateInput: Date) {
  let falseWeekNum = parseInt(this.datePipe.transform(dateInput, 'ww'));
  this.rightWeekNum = falseWeekNum ? falseWeekNum : falseWeekNum-1;
}

-1
now = new Date();
today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
firstOfYear = new Date(now.getFullYear(), 0, 1);
numOfWeek = Math.ceil((((today - firstOfYear) / 86400000)-1)/7);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.