8

日のミリ秒を指定して、その日の始まりからの時間を把握したい。

つまり、1340323100024 が与えられたとします。これは、2012 年 6 月 21 日の正午のようなものです。今、私は 1340262000000 になる 1 日の始まりからのミリ秒が必要です (少なくとも、それが本来あるべきものだと思います。)

1340323100024 から 1340262000000 を取得するにはどうすればよいですか?

やってみた

Math.floor(1340323100024/86400000) * 86400000 

しかし、それは私に1340236800000を与えます。それから日付オブジェクトを作成すると、20日になります。

1340323100024 から日付オブジェクトを作成し、月、年、および日付を取得して、1340262000000 を与える新しいオブジェクトを作成できることは知っていますが、ばかげていると思います。

任意の助けをいただければ幸いです。

ところで、違いがあれば、これをjavascriptでやっています。

4

3 に答える 3

9

Thilo (タイムゾーンにローカライズ) には同意しますが、おそらく次のように取り組みます。

// Original: Thu Jun 21 2012 19:58:20 GMT-0400 (Eastern Daylight Time)
var ms = 1340323100024;
var msPerDay = 86400 * 1000;
var beginning = ms - (ms % msPerDay);
// Result:    Wed Jun 20 2012 20:00:00 GMT-0400 (Eastern Daylight Time)

または、必要に応じて:

Number.prototype.StartOfDayMilliseconds = function(){
  return this - (this % (86400 * 1000));
}

var ms = 1340323100024;
alert(ms.StartOfDayMilliseconds());

編集

タイムゾーンにこだわる場合は、次を使用できます。

// Original: Thu Jun 21 2012 19:58:20 GMT-0400 (Eastern Daylight Time)
var ms = 1340323100024;
var msPerDay = 86400 * 1000;
var beginning = ms - (ms % msPerDay);
    beginning += ((new Date).getTimezoneOffset() * 60 * 1000);
// Result:    Thu Jun 21 2012 00:00:00 GMT-0400 (Eastern Daylight Time)

オフセットが削除され、前日の午後 8 時がタイムスタンプの実際の日の真夜中に変わることに注意してください。また、おそらく (実装によっては) 1 日の始まりのモジュロの前または後に追加を行うこともできます (好みに応じて)。

于 2012-06-22T02:57:10.300 に答える
-3

実際には(currTimeMilli - 18000000) % 864000000、GMT+5 の 1 日が始まってからのミリ秒数を取得する必要があります。

于 2016-09-06T16:01:34.457 に答える