(最後の)真夜中から経過した時間をミリ秒で計算する最良の方法は何ですか?
24449 次
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(推奨回答)、Kolink、Lai以外の多くの回答はここでは間違っています
一緒に見てみましょう
最初の間違い
OptimusCrimeとAndrewD .の回答:
マラが推測したように、真夜中に夏時間が適用された場合、誤った値が取得されます。デバッグしましょう:
- 3月の最後の日曜日だとします
- 時間は午前2時に固定されています。
- 時計の午前10時を見ると、実際には真夜中から11時間が経過しています。
10 * 60 * 60 * 1000
しかし、代わりにミリ秒を数えます- トリックは、真夜中が異なる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);
msSinceMidnight
0
減算操作の前の計算中にオブジェクトが変更されるため、常に
最後に、このコードは機能します。
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 に答える