問題

私は現在の年、現在の月、現在の週、現在の日のタイムスタンプを作成するC#スクリプトを持っています。

 DateTime now = DateTime.UtcNow;

now = new DateTime(now.Year, 1, 1);
int yearDay = (int)(now.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

now = new DateTime(now.Year, now.Month, 1);
int monthDay = (int)(now.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

now = DateTime.UtcNow.StartOfWeek(DayOfWeek.Monday);
int weekDay = (int)(now.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

now = new DateTime(now.Year, now.Month, now.Day);
int toDay = (int)(now.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
 

今私は同じことを達成したいが、javascriptで...私はその年を取得しましたが、月、週、日を取得する方法がわかりません。

 var d = new Date();

// YEAR TIMESTAMP //
var thisYear = d.getUTCFullYear();
var y = Date.UTC(thisYear, 0, 1, 0, 0, 0, 0);
var yearDay = Math.floor(y / 1000);
 

誰かがこの問題で私を助け、事前に感謝することを願っています:-)


私もこのような月を得ましたが、現在の日と週をどのように取得するかを理解する必要があります。

 // MONTH TIMESTAMP //
var thisMonth = d.getUTCMonth();
var m = Date.UTC(thisYear, thisMonth, 1, 0, 0, 0, 0);
var monthDay = Math.floor(m / 1000);

// C# toDay output: 1548979200
// C# weekDay output: 1548633600
 

今日これを試しましたが、出力はC#と同じではありません:

 // DAY TIMESTAMP //
var thisDay = d.getUTCDay();
var da = Date.UTC(thisYear, thisMonth, thisDay, 0, 0, 0, 0);
var toDay = Math.floor(da / 1000);

// output: 1549324800
 

まだ助けを望んでいる:-)

********編集2 **************

さて、私はついに正しい日を得ました:

 // DAY TIMESTAMP //
var da = Date.UTC(thisYear, thisMonth, thisDay, 0, 0, 0, 0);
var toDay = Math.floor(da / 1000);
 

今残っているのは、どのように私は正しい週を得ることができるかです。

私はこれを試した:

 // WEEK TIMESTAMP //
var w = Date.UTC(thisYear, thisMonth, d.setDate(d.getDate() - (d.getDay() || 7) + 1), 0, 0, 0, 0);
var weekDay = Math.floor(w / 1000);
 

これはNaNを出力します。どのように私はこれを達成することができます上の任意のアイデア?

  ベストアンサー

週の始めに月曜日を取得するには、日数を減算して1を加算することができます。日曜日は0なので、前の月曜日にその日数を7に変更します。

コードを間違って使用していますが、d.setDate(...)は調整された日付の時刻値を返します。これはあなたが望むものです。それ以上何もする必要はありません。しかし、UTC値を使用しているので、ここではあなたの文脈にあります。

UTCを値にヒントとして含めるように変数名を変更しました。また、 "Date"メソッドは月の日数を返し、 "Day"メソッドは週の日数を返します。

 var d = new Date();
var utcYear = d.getUTCFullYear();
// Only year and month need to be set, missing values will default to minimums
var yearDay = Math.floor(Date.UTC(utcYear, 0) / 1000);

// MONTH TIMESTAMP //
var utcMonth = d.getUTCMonth();
var monthDay = Math.floor(Date.UTC(utcYear, utcMonth) / 1000);

// DAY TIMESTAMP // - changed "Day" to "Date"
var utcDate = d.getUTCDate();
var toDay = Math.floor(Date.UTC(utcYear, utcMonth, utcDate) / 1000);

// WEEK TIMESTAMP //
var w = new Date(Date.UTC(utcYear, utcMonth, utcDate));

// Set w to Monday at start of week
w.setUTCDate(w.getUTCDate() - (w.getUTCDay() || 7) + 1);

var weekDay = Math.floor(w / 1000);

console.log(yearDay, monthDay, toDay, weekDay); 

  同じタグがついた質問を見る

javascriptc#datetimestamp