2017-10-05 48 views
1

私はウェブを検索し、その年の週番号を取得するスクリプトを見つけました。しかし、私のカウントは違いです。下の画像は取得したい週の番号です。私が '1/5/2015'を使ってテストしたとき、私のコードは週数が2になっていましたが、私の必要条件では週数は1になるはずです。誰かが私を助けることができますか?前もって感謝します。JavaScriptから週単位で週番号を取得

enter image description here

私は私のコードがありIamSilviu/Get week number

ではJavaScriptを見つけました:

function myWeekNumber(thisDate) { 
var dt = new Date(thisDate) 
    var onejan=new Date(dt.getFullYear(), 0, 2); 
    return Math.ceil((((dt - onejan)/86400000) + onejan.getDay() + 1)/7); } 
+0

年の最初の週が満杯かどうかを確認して – epascarello

+0

を調整してください[このような質問](https://stackoverflow.com/questions/9045868/javascript-date-getweek)の回答は正しいですか? –

+0

あいまいな日付は避けてください。私には、「1/5/2015」は2015年5月1日ですが、2015年1月5日だと思う質問の文脈からです。また、2週目の決定方法を定義する必要があります.ISO週番号の開始最初の週には木曜日が含まれていますので、2週間目になります。どんなアルゴリズムを使いたいですか? – RobG

答えて

-2

のJsは、指定の日付から日付を取得するために使用できる機能inbulid機能を持っています週getweek()。

var week=date.getWeek() 
+0

erm ...いいえ、そうではありません(それは**機能**でも表示されていません) –

+0

言語機能についてのクレームを作成するときは、[*仕様の関連部分への参照を含めると常に便利です*](http://ecma-international.org/ecma-262/8.0/#sec-date-objects)。あなたが見つけることができない場合、それは言語の特徴ではないかもしれません... – RobG

0

あなたが実装しようとしているアルゴリズムことのようだ:

  1. 週は日曜日
  2. に開始する年の最初の週は、年の任意の日を有するものです、例えば2016年1月1日は金曜日だったので、2016年の最初の週は2015年12月27日日曜日にこの場合

を始め、それが夏時間の問題を回避するために、UTCメソッドを使用するのが最善です:

function getWeekNumberNonISO(d) { 
 
    // Create UTC equivalent for 23:59:59.999 on the passed in date 
 
    var sat = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(),23,59,59,999)); 
 
    // Set to Saturday at end of week 
 
    sat.setUTCDate(sat.getUTCDate() + 6 - sat.getUTCDay()); 
 
    // Get first day of year 
 
    var firstDay = new Date(Date.UTC(sat.getUTCFullYear(), 0, 1)); 
 
    // Set to Sunday on or before, i.e. first day of first week in year 
 
    firstDay = firstDay.setUTCDate(firstDay.getUTCDate() - firstDay.getUTCDay()); 
 
    // Week number is difference in dates divided by ms/week rounded 
 
    return Math.round((sat - firstDay)/(6.048e8)); 
 
} 
 

 
// Get week number for Mon 5 Jan 2015 
 
console.log(getWeekNumberNonISO(new Date(2015,0,5))); // 2 
 
// Get week number for Sat 31 Dec 2011 
 
console.log(getWeekNumberNonISO(new Date(2011,11,31))); //53 
 
// Get week number for Sat 1 Jan 2011 
 
console.log(getWeekNumberNonISO(new Date(2011,0,1))); // 1 
 
// Get week number for Sun 2 Jan 2011 
 
console.log(getWeekNumberNonISO(new Date(2011,0,2))); // 2

関連する問題