İki tarih arasındaki zaman farkını saniye cinsinden öğrenin


157

Saniyeler içinde iki tarih arasında bir fark elde etmeye çalışıyorum. Mantık şöyle olacaktır:

  • şimdi olacak bir başlangıç ​​tarihi belirleyin;
  • Başlangıç ​​tarihi artı gelecekte birkaç saniye olacak bir son tarih belirleyin (örneğin 15 diyelim)
  • bu ikisi arasındaki farkı öğrenin (saniye miktarı)

Bunu tarihlerle yapmamın nedeni, son tarih / saatin başka değişkenlere bağlı olması ve asla aynı olmaması (bir kullanıcının bir şeyi ne kadar hızlı yaptığına bağlı) ve ayrıca diğer şeyler için başlangıç ​​tarihini de saklamamdır.

Bunun gibi bir şey deniyorum:

var _initial = new Date(),
    _initial = _initial.setDate(_initial.getDate()),
    _final = new Date(_initial);
    _final = _final.setDate(_final.getDate() + 15 / 1000 * 60);

var dif = Math.round((_final - _initial) / (1000 * 60));

Sorun şu ki, asla doğru farkı alamıyorum. 24 * 60Beni saniyelerle bırakacak olana bölmeyi denedim , ama asla doğru yapmadım. Peki mantığımın nesi yanlış? Oldukça geç olduğu için aptalca bir hata yapıyor olabilirim ama işe alamamak beni rahatsız ediyor :)


2
İşlem sırası anahtardır.
Dylan Çapraz

1
Bir zaman damgasına sahip olmak, 15 saniye eklemek ve ardından saniye cinsinden farkın ne olduğunu görmek istiyorsunuz. Farkın çok yüksek olduğunu söyleyebilirim .... bekleyin .... 15 saniye?
adeneo


1
Ne yapmaya çalıştığınızı gerçekten anlıyorum (sanırım), ancak şu anda unix zamanı olan new Date () alırsanız, 15 saniye ekleyin ve hemen farkı kontrol edin, fark 15 saniye olacaktır. (eksi hesaplamak için geçen milisaniye), ama niyetinizin bunu gelecekte bir şekilde karşılaştırmak olduğunu tahmin ediyorum.
adeneo

1
Gerçekten anlamıyorum, amacımı kanıtlamak için, işte yukarıdaki örneğiniz için çalışan bir FIDDLE . Kullanıcının bir şeyi yapmasının ne kadar sürdüğünü anlamaya çalışıyorsanız, genellikle kullanıcının işlemi başlattığı zaman damgasını ve kullanıcının işlemi bitirdiği zaman damgasını alırsınız ve bunları karşılaştırırsınız ve ne kadar sürdüğünü bilirsiniz . 15 saniye ne için?
adeneo

Yanıtlar:


301

Kod

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;

Veya (endDate - startDate) / 1000typcript kullanmadığınız sürece yorumlarda belirtildiği gibi daha da basit .


Açıklama

Nesneler için getTime()yöntemi çağırmanız Dateve ardından bunları çıkarmanız ve 1000'e bölmeniz gerekir (çünkü başlangıçta milisaniye cinsinden). Ek olarak, getDate()yöntemi çağırırken aslında ayın gününü, getTime()yöntemi çağırarak elde edeceğiniz çağ zamanının aksine 1 ile 31 arasında bir tam sayı olarak alıyorsunuz (sıfıra dayalı değil) , 1 Ocak 1970 00: 00'dan beri geçen milisaniye sayısını temsil eder


Rant

Tarihle ilgili işlemlerinizin ne olduğuna bağlı olarak , geliştirici için işleri çok daha kolaylaştıran date.js veya moment.js gibi bir kitaplığı entegre etmeye yatırım yapmak isteyebilirsiniz , ancak bu yalnızca bir kişisel tercih meselesidir.

Örneğin moment.js'demoment1.diff(moment2, "seconds") güzel olanı yapardık .


Bu cevap için faydalı belgeler


16
GetTIme'ye gerek yoktur , - operatörü onları Numbers'a zorlayacağı için Tarihler birbirinden çıkarılabilir .
RobG

3
typecript kullanırsanız getTime gereklidir, herhangi bir, sayı veya enum dışındaki öğeler arasında aritmetik işleme izin vermez
zaffaste

Kullanabilirsiniz .valueOf(), -operatörün her durumda arayacağı şey budur ...
Heretic Monkey

1
saat / dakika zaman farklılıklarına da ihtiyacımız olursa ...? 60 mı yoksa birden fazla mı bölmeliyim? @Juan
gumuruh

Lütfen yeni şüpheleri ayrı sorular olarak ekleyin, ancak bu soru muhtemelen yinelenen soru olarak kapatılacağından, buraya bir göz atın stackoverflow.com/questions/1322732/…
Juan Cortés

5

new Date().getTime()Zaman damgası almak için kullanabilirsiniz . Ardından, bitiş ile başlangıç ​​arasındaki farkı hesaplayabilir ve sonunda olan zaman damgasını msdönüştürebilirsiniz s.

const start = new Date().getTime();
const end = new Date().getTime();

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);

4
<script type="text/javascript">
var _initial = '2015-05-21T10:17:28.593Z';
var fromTime = new Date(_initial);
var toTime = new Date();

var differenceTravel = toTime.getTime() - fromTime.getTime();
var seconds = Math.floor((differenceTravel) / (1000));
document.write('+ seconds +');
</script>

2

Aşağıdaki kod saniye cinsinden zaman farkını verecektir.

var date1 = new Date(); // current date
var date2 = new Date("06/26/2018"); // mm/dd/yyyy format
var timeDiff = Math.abs(date2.getTime() - date1.getTime()); // in miliseconds
var timeDiffInSecond = Math.ceil(timeDiff / 1000); // in second

alert(timeDiffInSecond );

0

üst düzey programlama dillerinden özel işlevleri kullanmayı deneyin. JavaScript .getSeconds();buraya uygundur:

var specifiedTime = new Date("November 02, 2017 06:00:00");
var specifiedTimeSeconds = specifiedTime.getSeconds(); 

var currentTime = new Date();
var currentTimeSeconds = currentTime.getSeconds(); 

alert(specifiedTimeSeconds-currentTimeSeconds);

0

momentjs kullanılarak şimdi ve 10 dakika sonra arasındaki zaman farkı

let start_time = moment().format('YYYY-MM-DD HH:mm:ss');
let next_time = moment().add(10, 'm').format('YYYY-MM-DD HH:mm:ss');

let diff_milliseconds = Date.parse(next_time) - Date.parse(star_time);
let diff_seconds = diff_milliseconds * 1000;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.