Welcome to Emakin Q&A, where you can ask questions and receive answers from other members of the community.

Forma Girilen Bir Numaranın Hafta Numarasını Nasıl Bulabiliriz?

0 votes
37 views

Merhaba,

Formda girilen bir tarihin yılın kaçıncı haftasına ait olduğunu bulmak istiyorum. İnternetten bulduğum JS örneklerini denediğimde tarih.setDate is not a function hatası alıyorum. Hafta numarasını nasıl bulabilirim. Teşekkürler.

asked Nov 14, 2016 by omerdolgun Han Solo (1,360 points)

1 Answer

0 votes

Merhaba,

Xml'den aldığınız dateTime string'ini new Date() fonksiyonuna geçerek datetime objesine çevirdikten sonra ilgili fonksiyonları kullanabilirsiniz.

İnternetten bulduğum aşağıdaki fonksiyon belirli bir dateTime'ın yılın kaçıncı ayına ait olduğunu dönüyor.

function getWeekNumber(d) {
// Copy date so don't modify original
d = new Date(+d);
d.setHours(0,0,0,0);
// Set to nearest Thursday: current date + 4 - current day number
// Make Sunday's day number 7
d.setDate(d.getDate() + 4 - (d.getDay()||7));
// Get first day of year
var yearStart = new Date(d.getFullYear(),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 weekNo; }

var dateTimeStr = '2016-11-15T00:40:20.2279423Z';
var dateTimeObj = new Date(dateTimeStr);
var weekNumber = getWeekNumber(dateTimeObj );

answered Nov 15, 2016 by bulentyuksel C-3PO (2,710 points)

var dateTimeStr = $Xml.EvaluateDateTime('Tarih') yazdığım zaman weekNumber ı NaN olarak dönüyor. dateTimeStr yi de throw a koyduğum zaman Argument passed in is not serializable hatası alıyorum.

Bu fonksiyonu Prework Script veya Postwork Script'te çalıştırdığınızda bu hatayı verebilir, muhtemelen oralarda ihtiyaç duyulan fonksiyonlara ulaşılmıyor. Sorguyu Form Script'te çalıştırabilirsiniz. Ek olarak ilk verdiğim fonksiyonun hesaplamasının yanlış olduğunu gördüm, aşağıdakini kullanabilirsiniz:

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

var dateTimeStr = $Xml.EvaluateDateTime('Tarih');
var dateTimeObj = new Date(dateTimeStr);
$Xml.SetValue('WeekNumber', dateTimeObj.getWeek());

...