PHP gibi PHP'de de yılın haftasını edinin


140

PHP gibi yılın şu anki hafta sayısını nasıl edinebilirim date('W')?

Olmalı ISO-8601 haftalık yıl sayısı, Pazartesi'den başlayarak haftalar olmalıdır.


1
'Yılın javascript haftası' nı aradığımda verilen ilk bağlantı olan <a href=" javascript.about.com/library/blweekyear.htm "> <b> buraya </b> </a> bakın.
Pete Wilson

+1 Lol! Parçacığı kendimden aldım, ama kaynağı bir süre önce aldığım gibi hatırlayamadım.
Tom Chantler

@Pete: Bu kod geçerli hafta 22 olur. 21 olmalı
PeeHaa

@Pete:: D Basit bir -1 Nopez hile yapmayacak: P ISO-8601 hafta sayısını alamazdı. ISO-8601'de bir hafta Pazartesi günü başlıyor. İlk hafta, yılın ilk Perşembe günü olan haftadır. en.wikipedia.org/wiki/ISO-8601 . PS seni küçümseyen ben değildim.
PeeHaa

Yanıtlar:


276

İstediğinizi burada elde edebilmeniz gerekir: http://www.merlyn.demon.co.uk/js-date6.htm#YWD .

Aynı sitede daha iyi bir bağlantı: Haftalarla çalışmak .

Düzenle

Sağlanan bağlantılara ve Dommer tarafından kazanılanlara dayanan bazı kodlar. Http://www.merlyn.demon.co.uk/js-date6.htm#YWD adresindeki sonuçlara karşı hafifçe test edilmiştir . Lütfen iyice test edin, garanti verilmez.

2017'yi düzenle

Gün ışığından yararlanma süresinin ve 1 Ocak Cuma'nın olduğu yılların tarihleri ​​ile ilgili bir sorun vardı. Tüm UTC yöntemleri kullanılarak düzeltildi. Aşağıdakiler Moment.js'ye aynı sonuçları döndürür.

/* 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" tarihi oluşturulurken saatler sıfırlanır.

Minimize edilmiş prototip sürümü (sadece hafta sayısını döndürür):

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

Test bölümü

Bu bölümde, herhangi bir tarihi YYYY-AA-GG biçiminde girebilir ve bu kodun Moment.js ISO hafta numarasıyla aynı hafta numarasını verdiğini kontrol edebilirsiniz (2000'den 2050'ye kadar 50 yıldan fazla test edilmiştir).

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
Bu kod 2 Ocak 2011 tarihini 52. haftada 53. hafta olarak hesaplar. Bu, orijinal kodda doğru çalışır, ancak uyarlamanızda çalışmaz.
Alasdair

4
Kıçımı kurtardın. Teşekkürler. Açık Kaynak'a katkıda bulunmak istiyorsanız, jQuery UI yöntemi için bir yama oluşturmanızı öneririm: $ .datepicker.iso8601Hafta (tarih) yalnızca hafta döndürür Hayır, ancak yıl yok.
Christian

18
Bugün, 4 Ocak 2016'da, eklemenin d.setMilliseconds(0)de gerekli olduğunu fark ettim - yeni Date () veya new Date ("1/4/2016") kullanmamıza bağlı olarak aynı tarih için farklı hafta sayıları göstermeye devam etti. Sadece aynı şeyi yaşayabilecek başkaları için.
Jacob Lauritzen

2
Sağlanan kodu ISO 8601 takip etmiyor, bu biri tarafından kapalı
Eric Grange

2
Hata! Haklısın, yazım hatası, çalışan '2015-12-30' olması gerekiyordu.
Ally


26

Yukarıda belirtildiği gibi, ancak sınıfsız:

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

4
Tek Ocak-Tang! * ninja-roll *
CodeManX

2
Bu, yılın ilk haftası için bile doğru hafta sayısını getiren tek yanıttır.
PrasadW

(now.getTime() - onejan.getTime())Yapı sorunlarından kaçınmak için yapmayı unutmayın .
Swoox

4
Soru, bunun görmezden geldiği ISO 8601'i istedi. Soruya bir cevap olarak bu sadece yanlış
havlock

23

Uyumlu bir şekilde 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
Kısa, ancak Pazar günü haftanın ilk günü olarak kabul eder, bu nedenle 27 Aralık 2015 Pazar 52 haftasının son günü yerine 53 haftasının ilk günüdür.
RobG

3
Ben bu prototip eklenen beri Tarih ilk gün gibi Pazar davranır gibi beklediğiniz bu olduğunu düşünüyorum.
Ed Sykes

Yaz Saati Uygulamasında bu sorun yaşamayacak mı? Ben yaz aylarında 1 am kadar ilerlemeyeceğini düşünüyorum.
Hafthor

Ayrıca, bu teknik olarak haftada 0: 00: 00.001 a kadar ilerlemez mi? Math.floor kullanmak daha iyi mi?
Hafthor

11

Jacob Wright'ın Date.format()kütüphanesi tarih biçimlendirmesini PHP'nin date()işlevi biçiminde uygular ve ISO-8601 hafta numarasını destekler:

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

Sadece bir hafta sayı için biraz fazla olabilir, ancak PHP stil biçimlendirmesini destekliyor ve çok fazla yapacaksanız oldukça kullanışlıdır.


Hızlı saldırıya uğramış komut dosyaları için iyi bir çözüm :)
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;
    }

Aşağıdaki kod saat diliminden bağımsızdır (kullanılan UTC tarihleri) ve https://en.wikipedia.org/wiki/ISO_8601 uyarınca çalışır


4

Oracle'ın özelliklerinde açıklanan Java SE'nin SimpleDateFormat sınıfını yararlı buldum : http://goo.gl/7MbCh5 . Google Apps Script'teki benim durumumda şöyle çalıştı:

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

Örneğin, bir e-tablo makrosunda dosyanın gerçek saat dilimini alabilirsiniz:

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

4

Bu, Date.prototype'e yıl başından itibaren hafta sayısını döndüren "getWeek" yöntemini ekler. Argüman haftanın hangi gününü ilk olarak değerlendireceğini tanımlar. Herhangi bir tartışma yapılmazsa, ilk gün Pazar günü kabul edilir.

/**
 * 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'nın ilk takvim haftası 4 Ocak'ta Almanya'da başlıyor, ancak işleviniz 1 Ocak'tan itibaren 0'dan tekrar saymaya başlıyor. Ayrıca yıl sonunda yanlış sayılar döndürüyor, örneğin 2018-11-31 (53. hafta) için 52, zaten 2019'un 1. takvim haftası olmasına rağmen : new Date(Date.UTC(2018,11, 31)).getWeek(1)+1(Pazartesi, Almanya'da haftanın 1. günüdür).
CodeManX

Bu şekilde tasarlandı ve bence en olası kullanım örneği. Aksi takdirde 2016'nın ilk 3 günü düşecekti. Ayın ilk günlerinin, o ayın ilk haftasını içerdiği, hangisinin ve kaç gün olduğu önemli değildir. Fonksiyonun farklı çalışması için ihtiyacınız varsa, ihtiyaçlarınıza göre ayarlayabilirsiniz. Benzer şekilde, bir hafta hem verilen yıla hem de ertesi yıla aitse, o yılın son haftası ve bir sonraki yılın ilk haftası (mevcut mantığa göre) olarak adlandırılabilir.
Tigran

Bilgi için teşekkürler. Rob8'in ISO8601 hafta tarihlerini doğru bir şekilde uygulayan çözümünü kullandım (Aralık ayının son günleri ve Ocak ayının ilk günleri 52, 53 veya 1 haftaya ait olabilir: en.m.wikipedia.org/wiki/ISO_week_date
CodeManX

4

Herhangi bir Tarihin hafta numarasını alın

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

Misal

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
İnanamıyorum, ama bu işlev her zaman çalışan tek işlev! Kabul edilen cevap gün ışığından yararlanma zamanını geçtiğinde çaldı, diğerleri ise belirli yıllarda hafta sayısı olarak '0' dedi. - ve bazıları bazen önceki günü döndüren UTC işlevlerine güveniyordu, bu yüzden ona '53' veya '54' haftasını atadı. Ne yazık ki bir Pazar günü başlamak için haftaya ihtiyacım var ve bu kodu anlamak çok zor ...
Melissa Zachariadis

@MelissaZachariadis dedi I need the week to begin on a Sunday; Sanırım tek değişiklik hafta içi () işlevinde.getDay()+1.getDay()
Rafa

4

Aşağıdaki kod, doğru ISO 8601 hafta sayısını hesaplar. date("W")Her hafta 1/1/1970 ve 1/1/2100 arasında PHP'lerle eşleşir .

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

Kaynak: Taco van den Broek


Prototipleri genişletmiyorsanız, işte bir işlev:

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

Örnek kullanım:

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

Bu işlevi seviyorum, ama bir sorum var; Pazar gününe geri koymak istersem ne yapmalıyım? Parçanın ne yaptığı hakkında hiçbir fikrim +6 ) % 7yok. Bir fırçalama teşekkürler!
NoobishPro

1
@Babydead ISO haftası Pazartesi günü başlar, ancak JavaScript getDay()bir Pazar günü başlar, bu yüzden Pazar günü başlamasını istiyorsanız düzeltmeyi kaldırabilirsiniz:var nDay = date.getDay();
thdoan

Ben hafta sayısı elde 8 farklı JS uygulamaları denedim. Bu işe yarayan tek işlevdir, ancak tüm alıcıları ve ayarlayıcıları getUTC .. ve setUTC olarak değiştirirsem nedenini bilmiyorum. Bununla test yapıyordum: 2017-07-17T00: 00: 00.000Z (29. hafta) 2017-07-23T23: 59: 59.000Z (29. hafta) 2021-01-04T00: 00: 00.000Z (1. hafta)
psiko brm


2

Benim için oldukça iyi çalışan kod snippet'i:

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

Not:
dGeçerli hafta numarasını istediğim Tarihim. Sayılar içine dönüştürür Tarihleri (typescript ile çalışan).
+


1

İşte JavaScript'te hafta sayısını hesaplamak için kullandığım uygulama. yaz ve kış saati ofsetleri için düzeltildi. Bu makaleden haftanın tanımını kullandım: ISO 8601

Haftalar pazartesiden pazara kadardır ve 4 Ocak her zaman yılın ilk haftasındadır.

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

test için Qunit'te aşağıdaki JavaScript testlerini kullandım

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

Bu hafta sayı şey a ** 'da gerçek bir acı oldu. İnternet etrafındaki senaryoların çoğu benim için çalışmadı. Çoğu zaman çalıştılar, ancak hepsi bir noktada kırıldı, özellikle yıl değiştiğinde ve yılın son haftası aniden gelecek yılın ilk haftası vb. Hafta 53).

Not: Örnekler Avrupa haftalarıyla çalışmak üzere tasarlanmıştır (önce Pzt)!

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

Bunu test ettim ve çok iyi çalışıyor gibi görünüyor ama içinde bir kusur fark ederseniz, lütfen bana bildirin.


0

Haftalık ISO-uygunluğunu almak için en kısa kodu almak için çok çalıştım.

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

Değişken date, orijinalin değiştirilmesini önlemek için gereklidir this. Kod uzunluğunu kaydetmek için dönüş değerlerini setDate()ve setMonth()dağıtım yapmak getTime()için kullandım ve tek bir öğenin çarpımı veya beş sıfırlı bir sayı yerine günün milisaniyesi için üstel bir sayı kullandım. thisTarih veya milisaniye sayısı, dönüş değeri Stringörneğin "49/2017" dir.



0

Başka bir kütüphane tabanlı seçenek: use d3-time-format:

const formatter = d3.timeFormat('%U');
const weekNum = formatter(new Date());

0

ISO-8601 için ayarlanmış Angular2 + DatePipe için en kısa geçici çözüm :

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.