29

(最後の)真夜中から経過した時間をミリ秒で計算する最良の方法は何ですか?

4

7 に答える 7

39

現在の日/月/年を使用して新しい日付を作成し、差を取得します。

var now = new Date(),
    then = new Date(
        now.getFullYear(),
        now.getMonth(),
        now.getDate(),
        0,0,0),
    diff = now.getTime() - then.getTime(); // difference in milliseconds
于 2012-06-08T07:05:15.797 に答える
36

たくさんの答えがあるので、ここに別のものがあります:

var d = new Date(), e = new Date(d);
var msSinceMidnight = e - d.setHours(0,0,0,0);

関数として:

function getMsSinceMidnight(d) {
  var e = new Date(d);
  return d - e.setHours(0,0,0,0);
}

alert(getMsSinceMidnight(new Date()));
于 2012-06-08T09:25:51.847 に答える
11

RobG(推奨回答)KolinkLai以外の多くの回答はここでは間違っています

一緒に見てみましょう


最初の間違い

OptimusCrimeとAndrewD .の回答:

マラが推測したように、真夜中に夏時間が適用された場合、誤った値が取得されます。デバッグしましょう:

  1. 3月の最後の日曜日だとします
  2. 時間は午前2時に固定されています。
  3. 時計の午前10時を見ると、実際には真夜中から11時間が経過しています。
  4. 10 * 60 * 60 * 1000しかし、代わりにミリ秒を数えます
  5. トリックは、真夜中が異なるDST状態と現在の状態で発生したときに再生されます

2番目の間違い

ケネベックの答え:

RobGが書いたように、システム時刻を2回取得すると、時計が刻々と過ぎてしまう可能性があります。場合によっては、異なる日付で表示されることもあります。これをループで再現できます。

for (var i = 0; true; i++) {
    if ((new Date()).getTime() - (new Date()).getTime()) {
        alert(i); // console.log(i);  // for me it's about a 1000
        break;
    }
}

第三に、あなたが経験する可能性のある私の個人的な落とし穴です

次のコードを検討してください。

var d = new Date(),
    msSinceMidnight = d - d.setHours(0,0,0,0);

msSinceMidnight0減算操作の前の計算中にオブジェクトが変更されるため、常に


最後に、このコードは機能します。

var d = new Date(),
    msSinceMidnight = d.getTime() - d.setHours(0,0,0,0);
于 2013-04-03T16:28:44.920 に答える
6

2つの日付を作成してもかまわない場合は、記述が簡単です。

var msSinceMidnight= new Date()-new Date().setHours(0,0,0,0);
于 2012-06-08T11:29:05.590 に答える
2
var d=new Date();
// offset from midnight in Greenwich timezone
var msFromMidnightInGMT=d%86400000;
// offset from midnight in locale timezone
var msFromMidnightLocale=(d.getTime()-d.getTimezoneOffset()*60000)%86400000;
于 2012-06-08T07:28:52.130 に答える
0
var today = new Date();
var d = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0, 0); 

var difference = today.getTime() - d.getTime();
于 2012-06-08T07:07:04.160 に答える
0

真夜中からの秒数は単に時刻を表示するためのものですが、時:分:秒を使用する代わりに、すべてが秒に変換されます。

私はこれがそれをするべきだと思います:

var now = new Date();    
var hours = now.getHours()*(60*60);
var minutes = now.getMinutes()*60;
var seconds = now.getSeconds();

var secSinceMidnight = hours+minutes+seconds;
于 2012-06-08T07:07:46.313 に答える