2016-04-25 21 views
1

とは異なり、それはwikipedia page for ISO 8601からISO 8601Moment.js週番号が<a href="http://momentjs.com/docs/#/manipulating/start-of/" rel="nofollow">docs for Moment.js</a>からMySQLの

によると、週の最初の日にmoment().startOf('isoWeek')セットを言う、それは他の同等の定義の中で(最初の週があると言います):開始年のその日の過半数(4つ以上)を含む最初の週。

docs for MySQLから、WEEK(date, 3)は、今週4日以上の最初の週の最初の日として月曜日が1週間(1〜53)と表示されます。

私が知る限り、これらはすべて1週間の同等の定義ですが、メッシュはありません。

私のMySQLデータベース(v5.6.17)は、ブラウザでMoment.js(v2.10.3)を使用して私にSELECT YEARWEEK('2016-4-20',3)

ため201616を与えるmoment().year(2016).week(16).startOf("isoweek")

者のためのMon Apr 11 2016が同じ週でない私を与え、なぜ私は理解できません。

+0

11月2016日は実際には2016年の15週目のISO開始であり、4月20日は16日です(月曜日の18日はその週のISO開始です)。あなたの文法は間違っていると思います。「瞬間('2016-W16 ')は2016-04-18の日付を設定します。月曜日は16週目の開始日です。 – RobG

答えて

3

.week()に電話すると、ロケールの週を設定しています(私はmoment.jsがそれをどのように動作させるかはわかりませんが)、おそらく最初の日は日曜日になります。 .startOf('isoweek')に電話すると、前週の月曜日であるその週のISO開始日が取得されます。そう

あなたはISOを使用する場合は、ISOメソッドを使用する必要があり、:

moment().year(2016).isoWeek(16).startOf('isoweek'); 

は2016-04-18T00ための瞬間オブジェクトを作成します:00:00

または文字列を使用します。

moment('2016-W16') // 2016-04-18T00:00:00 

デフォルトはISOの週番号と週の開始です。

+0

'year'ではなく' isoWeekYear'を設定するべきですか? 2016年の始めに、ISO年は2015年になる可能性があります。 – Brendon

+0

@ Brendon-なぜOPが年を築いているのか分かりませんが、私は違いを指摘していました。 * isoWeekYear *を設定すると、その日の同じ日の同じ日に設定されます。 1月1日頃には、約12ヶ月ほど日付をシフトすることができます。 2016年1月1日の金曜日が2015年のISO 53週にあったため、2016年12月30日の金曜日にISO 2016を設定すると、金曜日に 'moment('2016-01-01').isoWeekYear(2016).format() – RobG

+0

OPの意図が何であるかはわかりませんが、MySQLからのYEARWEEK関数について言及しています。おそらく、彼は年ではなく年を設定することに興味があると思われます。たとえOPがISO標準週年数と週数を使用していなくても、瞬間#yearではなく#momentYearモーメントを使用する必要があります。 – Brendon

関連する問題

 関連する問題