SORU
4 EYLÜL 2013, ÇARŞAMBA


İki datetimes arasındaki zaman farkı olsun

Momentjs ile her şey daha envolving bazı Tarihler yapabileceğimi biliyorum. Ama utanç verici, zor zamanlar basit gibi görünen bir şeyler yapmak için çabalıyorum: Biyokimya arasındaki fark 2 kat.

Örnek:

var now  = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";

//expected result:
"00:39:30"

ben ne çalıştı:

var now = moment("04/09/2013 15:00:00");
var then = moment("04/09/2013 14:20:30");

console.log(moment(moment.duration(now.diff(then))).format("hh:mm:ss"))
//outputs 10:39:30  

"10". Bu nedir anlamıyorum Eğer ki alakalı olup olmadığını utc-0300 yani biz Brezilya'da yaşıyorum.

moment.duration(now.diff(then)) sonucu Doğru iç değerleri ile bir süre

 days: 0
 hours: 0
 milliseconds: 0
 minutes: 39
 months: 0
 seconds: 30
 years: 0

Bir zaman aralığı için momentjs bir Süre dönüştürmek için nasıl? yani sorum şu ki: Eminim kullanabilirsiniz

duration.get("hours")  ":"  duration.get("minutes")  :  duration.get("seconds")

ama bir şey daha olduğunu hissediyorumzarifkayıp ben tamamen bu.

güncelleme
daha yakın, yukarıdaki örnekte arıyor now:

Tue Apr 09 2013 15:00:00 GMT-0300 (E. South America Standard Time)…}

ve moment(moment.duration(now.diff(then))):

Wed Dec 31 1969 22:39:30 GMT-0200 (E. South America Daylight Time)…}

İkinci değer Yaz Saati (-0200) neden emin değilim... ama tarihler sevmiyorum eminim :(

güncelleme 2

Peki, değeri muhtemelen 31/12/1969 gün ışığı zaman nerede kullanıldığını bir tarih... hepsi bu kadar, çünkü -0200.

CEVAP
4 EYLÜL 2013, ÇARŞAMBA


Bu çalışması gerekir:

var now  = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";

moment.utc(moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"))).format("HH:mm:ss")

// outputs: "00:39:30"

Ama eğer 24 saat veya daha fazla varsa, saat sıfırlanır unutmayın.

GÜNCELLEME

Eğer büyük veya 24 saatlik süreler için geçerli bir yanıt almak istiyorsanız, o zaman bu gibi şeyler yerine yapmak zorunda kalacaksın:

var now  = "04/09/2013 15:00:00";
var then = "02/09/2013 14:20:30";

var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);
var s = Math.floor(d.asHours())   moment.utc(ms).format(":mm:ss");

// outputs: "48:39:30"

Bir kısayol olarak utc zaman kullanıyorum unutmayın. d.minutes() d.seconds() ayrı ayrı çekebilirsin, ama aynı zamanda onları zeropad gerekir.

İkinci Güncelleme

Ayrıca bu amaç için özel olarak yazılmış yeni bir eklenti ile ilgilenebilirsiniz. Ayrıntılar için moment-duration-format bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Brendan van Son

    Brendan van

    5 Aralık 2006
  • Machinima

    Machinima

    17 Ocak 2006
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005