จะคำนวณความแตกต่างวันที่ใน JavaScript ได้อย่างไร


181

ฉันต้องการคำนวณความแตกต่างวันที่เป็นวันชั่วโมงนาทีวินาทีวินาทีมิลลิวินาที nanoseconds ฉันจะทำมันได้อย่างไร



1
การแก้ปัญหาด้านล่างนี้จะแตกถ้าทั้งสองวันที่เกี่ยวข้องอยู่ในเขตเวลาที่แตกต่างกัน ดูคำถามที่สำหรับวิธีการแก้ไขปัญหาstackoverflow.com/questions/3224834/ ที่แม่นยำยิ่งขึ้น?
Shyam Habarakada

คำตอบ:


219

สมมติว่าคุณมีDateวัตถุสองชิ้นคุณสามารถลบมันเพื่อให้ได้ความแตกต่างเป็นมิลลิวินาที:

var difference = date2 - date1;

จากตรงนั้นคุณสามารถใช้เลขคณิตอย่างง่ายเพื่อหาค่าอื่น ๆ


38
นี่คือคำตอบที่ถูกต้อง เช่นเพื่อให้ได้ความแตกต่างในแต่ละวันMath.floor((date2 - date1) / (1000*60*60*24))- สำหรับความแตกต่างในหน่วยอื่น ๆ ให้ปรับตัวส่วน (ค่าฐานเป็น ms)
trisweb

33
ไม่มีเลขคณิต "แบบง่าย" สำหรับการแปลงมิลลิวินาทีเป็นปี คุณต้องระวังปี bissextile, เขตเวลาและบางวันมี 23 หรือ 25 ชั่วโมง บางปีมี 365,25 วันจึงไม่มีเลขคณิตง่ายๆที่นี่ (ยังคงมองหาวิธีการแก้ปัญหาที่ถูกต้อง)
Alexandre Salomé

6
@Alexandre: คำถามที่ไม่เคยถามมานานหลายปี อันที่จริงการคำนวณความแตกต่างของปีนั้นไม่สำคัญ อย่างไรก็ตามสำหรับวันนั้นถูกต้องโดยสมมติว่าวันที่อยู่ในเขตเวลาเดียวกัน (เป็นสมมติฐานที่ไม่สมเหตุสมผล) เท่าที่ฉันรู้วันถูกกำหนดเป็น 24 ชั่วโมงและ 'การเปลี่ยนแปลง' ใด ๆ ที่เกิดจากการปรับเวลาตามฤดูกาลเป็นจริงของเขตเวลา หากคุณไม่ได้แยกแยะความแตกต่างระหว่างเขตเวลาแล้วการพยายามหาความแตกต่างของเวลาจะทำให้คุณตกอยู่ในโลกแห่งความเจ็บปวด แม้ว่าจะอยู่ในเขตเวลาเดียว แต่ก็ใช้ได้ดี
icktoofay

12
@ trisweb แม้แต่สิ่งที่เรียบง่ายเช่นเดียวกับการได้รับความแตกต่างในวันนั้นซับซ้อนกว่าความคิดเห็นของคุณ กี่วันระหว่าง 22.00 น. วันอังคารและ 9.00 น. วันพุธ อัลกอริทึมของคุณบอกว่า 0 อื่น ๆ อาจคิดว่า 1
RobG

@RobG relativists อาจคิดมากกว่า 1 หรือน้อยกว่า 0 ทุกอย่างขึ้นอยู่กับผู้สังเกตการณ์
Bystander ไร้เดียงสา

78
var DateDiff = {

    inDays: function(d1, d2) {
        var t2 = d2.getTime();
        var t1 = d1.getTime();

        return parseInt((t2-t1)/(24*3600*1000));
    },

    inWeeks: function(d1, d2) {
        var t2 = d2.getTime();
        var t1 = d1.getTime();

        return parseInt((t2-t1)/(24*3600*1000*7));
    },

    inMonths: function(d1, d2) {
        var d1Y = d1.getFullYear();
        var d2Y = d2.getFullYear();
        var d1M = d1.getMonth();
        var d2M = d2.getMonth();

        return (d2M+12*d2Y)-(d1M+12*d1Y);
    },

    inYears: function(d1, d2) {
        return d2.getFullYear()-d1.getFullYear();
    }
}

var dString = "May, 20, 1984";

var d1 = new Date(dString);
var d2 = new Date();

document.write("<br />Number of <b>days</b> since "+dString+": "+DateDiff.inDays(d1, d2));
document.write("<br />Number of <b>weeks</b> since "+dString+": "+DateDiff.inWeeks(d1, d2));
document.write("<br />Number of <b>months</b> since "+dString+": "+DateDiff.inMonths(d1, d2));
document.write("<br />Number of <b>years</b> since "+dString+": "+DateDiff.inYears(d1, d2));

โค้ดตัวอย่างที่นำมาจากที่นี่


สิ่งนี้จะคืนความแตกต่างวันที่ในรูปแบบที่กำหนดหากใช้เป็นตัวนับเดี่ยว ตัวอย่างเช่นหากคุณต้องการ 3 เดือน 4 วัน 5 ชั่วโมงมันจะไม่ให้ผลลัพธ์เหล่านั้น เพิ่มเติมในสาย 3 เดือน 96 วันและอีกหลายชั่วโมง
Joris Kroos

30

อีกวิธีหนึ่งคือแปลงความแตกต่างเป็นวัตถุ Date ใหม่และรับปีของวันนั้น (แตกต่างจาก 1970), เดือน, วัน ฯลฯ

var date1 = new Date(2010, 6, 17);
var date2 = new Date(2013, 12, 18);
var diff = new Date(date2.getTime() - date1.getTime());
// diff is: Thu Jul 05 1973 04:00:00 GMT+0300 (EEST)

console.log(diff.getUTCFullYear() - 1970); // Gives difference as year
// 3

console.log(diff.getUTCMonth()); // Gives month count of difference
// 6

console.log(diff.getUTCDate() - 1); // Gives day count of difference
// 4

ดังนั้นความแตกต่างจึงเป็นเหมือน "3 ปี 6 เดือน 4 วัน" หากคุณต้องการสร้างความแตกต่างในรูปแบบที่มนุษย์อ่านได้นั่นสามารถช่วยคุณได้


มันไม่ได้มีความหมาย! เราต้องการความแตกต่างทั้งหมด! ใน examp นี้ความแตกต่างในวันคือ 1281 ไม่ใช่ 4!
chaim.dev

3
@ chaim.dev "หากคุณต้องการสร้างความแตกต่างในสไตล์ที่มนุษย์อ่านได้นั่นจะช่วยคุณได้"
Murat Çorlu

7
สิ่งนี้ไม่น่าเชื่อถือ มันไม่ได้คำนึงถึงความยาวของเดือนที่แตกต่างกันหรือปีอธิกสุรทินและความผิดปกติอื่น ๆ
Marc Durdin

2
ขอบคุณ Murat โซลูชันนี้ได้แก้ไขปัญหาของฉันแล้ว สิ่งที่ฉันต้องการจริงๆมันต้องทำงานในลักษณะเดียวกับที่ php ทำ
Ritesh Patadiya

27

การแสดงออกเช่น "ความแตกต่างในวัน" นั้นไม่ง่ายอย่างที่คิด หากคุณมีวันที่ดังต่อไปนี้:

d1: 2011-10-15 23:59:00
d1: 2011-10-16 00:01:00

ความแตกต่างของเวลาคือ 2 นาที "ความแตกต่างในวัน" ควรเป็น 1 หรือ 0 หรือไม่ ปัญหาที่คล้ายกันเกิดขึ้นสำหรับการแสดงออกของความแตกต่างในเดือนปีหรืออะไรก็ตามตั้งแต่ปีเดือนและวันที่มีความยาวแตกต่างกันและเวลาที่แตกต่างกัน (เช่นวันที่เริ่มต้นการประหยัดเวลากลางวันสั้นกว่าปกติ 1 ชั่วโมงและสั้นกว่าสองชั่วโมง มันจบลงแล้ว)

นี่คือฟังก์ชั่นสำหรับความแตกต่างในวันที่ละเว้นเวลาเช่นสำหรับวันที่ด้านบนจะส่งคืน 1

/*
   Get the number of days between two dates - not inclusive.

   "between" does not include the start date, so days
   between Thursday and Friday is one, Thursday to Saturday
   is two, and so on. Between Friday and the following Friday is 7.

   e.g. getDaysBetweenDates( 22-Jul-2011, 29-jul-2011) => 7.

   If want inclusive dates (e.g. leave from 1/1/2011 to 30/1/2011),
   use date prior to start date (i.e. 31/12/2010 to 30/1/2011).

   Only calculates whole days.

   Assumes d0 <= d1
*/
function getDaysBetweenDates(d0, d1) {

  var msPerDay = 8.64e7;

  // Copy dates so don't mess them up
  var x0 = new Date(d0);
  var x1 = new Date(d1);

  // Set to noon - avoid DST errors
  x0.setHours(12,0,0);
  x1.setHours(12,0,0);

  // Round to remove daylight saving errors
  return Math.round( (x1 - x0) / msPerDay );
}

นี่สามารถกระชับได้มากกว่านี้:

/*  Return number of days between d0 and d1.
**  Returns positive if d0 < d1, otherwise negative.
**
**  e.g. between 2000-02-28 and 2001-02-28 there are 366 days
**       between 2015-12-28 and 2015-12-29 there is 1 day
**       between 2015-12-28 23:59:59 and 2015-12-29 00:00:01 there is 1 day
**       between 2015-12-28 00:00:01 and 2015-12-28 23:59:59 there are 0 days
**        
**  @param {Date} d0  - start date
**  @param {Date} d1  - end date
**  @returns {number} - whole number of days between d0 and d1
**
*/
function daysDifference(d0, d1) {
  var diff = new Date(+d1).setHours(12) - new Date(+d0).setHours(12);
  return Math.round(diff/8.64e7);
}

// Simple formatter
function formatDate(date){
  return [date.getFullYear(),('0'+(date.getMonth()+1)).slice(-2),('0'+date.getDate()).slice(-2)].join('-');
}

// Examples
[[new Date(2000,1,28), new Date(2001,1,28)],  // Leap year
 [new Date(2001,1,28), new Date(2002,1,28)],  // Not leap year
 [new Date(2017,0,1),  new Date(2017,1,1)] 
].forEach(function(dates) {
  document.write('From ' + formatDate(dates[0]) + ' to ' + formatDate(dates[1]) +
                 ' is ' + daysDifference(dates[0],dates[1]) + ' days<br>');
});


1
@ rudeovskizebear ได้รับการทดสอบใน IE, Firefox และ Safari แล้วทำงานได้ดี มันใช้ ECMAScript ขั้นพื้นฐานที่ฉันคาดว่าจะทำงานในเบราว์เซอร์ใด ๆ สิ่งที่ไม่ได้ผลสำหรับคุณ
RobG

ฉันวางไว้ในหน้าทดสอบและทำงานได้ดีใน chrome แต่ฉันยังคงได้รับกลับเป็นโมฆะใน IE9 และ FF ล่าสุด
mnsr

@ RafiB - ฉันไม่รู้ว่าคุณคิดว่ามีความแม่นยำมากกว่าอีกพวกเขาทำสิ่งเดียวกันคือคำนวณความแตกต่างในทั้งวันโดยใช้ค่าเวลา UTC ความคลุมเครือในคำถามยังไม่ชัดเจน หากเป็นเช่นนั้นอาจนำไปสู่วิธีแก้ไขปัญหาอื่น
RobG

@RobG โปรดแก้ไขตัวอย่างในความคิดเห็นของโซลูชันที่กระชับยิ่งขึ้น เดือนนี้ควรเป็น '12' ไม่ใช่ '22'
S.aad

1
@ IgorKudryashov ขออภัยฉันไม่ได้รับ 2000 เป็นปีอธิกสุรทินดังนั้น 28 ก.พ. 2543 ถึง 28 ก.พ. 2544 คือ 366 วัน ในปีที่ไม่ก้าวกระโดดก็คือ 365 วัน ฉันได้เพิ่มตัวอย่างเพิ่มเติม
RobG

18
<html lang="en">
<head>
<script>
function getDateDiff(time1, time2) {
  var str1= time1.split('/');
  var str2= time2.split('/');

  //                yyyy   , mm       , dd
  var t1 = new Date(str1[2], str1[0]-1, str1[1]);
  var t2 = new Date(str2[2], str2[0]-1, str2[1]);

  var diffMS = t1 - t2;    
  console.log(diffMS + ' ms');

  var diffS = diffMS / 1000;    
  console.log(diffS + ' ');

  var diffM = diffS / 60;
  console.log(diffM + ' minutes');

  var diffH = diffM / 60;
  console.log(diffH + ' hours');

  var diffD = diffH / 24;
  console.log(diffD + ' days');
  alert(diffD);
}

//alert(getDateDiff('10/18/2013','10/14/2013'));
</script>
</head>
<body>
  <input type="button" 
       onclick="getDateDiff('10/18/2013','10/14/2013')" 
       value="clickHere()" />

</body>
</html>

ไม่ช่วยฉัน ไม่สามารถขยายเวลานี้เป็นเดือนหรือปีในแนวทางเดียวกันได้
tomazahlin

9

ใช้Moment.jsสำหรับการคำนวณวัน - เวลาที่เกี่ยวข้องกับ JavaScript ของคุณทั้งหมด

คำตอบสำหรับคำถามของคุณคือ:

var a = moment([2007, 0, 29]);   
var b = moment([2007, 0, 28]);    
a.diff(b) // 86400000  

รายละเอียดที่สมบูรณ์สามารถพบได้ที่นี่


4
และโอบกอดพิเศษ 400+ Kb สำหรับความแตกต่างเพียงวันที่
Romeo Mihalcea

@RomeoMihalcea ลดขนาดช่วงเวลาปัจจุบัน 2.22.2 พร้อมหนึ่งภาษาคือ 53 KB, 17 KB gzipped ฉันเข้าใจความกังวลของคุณ มันเป็นห้องสมุดขนาดใหญ่ที่ใช้สำหรับฟังก์ชั่นง่าย ๆ เพียงอย่างเดียว แต่มันจะคอยดูแลนิสัยที่เกี่ยวข้องกับวันที่ / เวลาที่มันมักจะคุ้มค่า
HeikoS

8
function DateDiff(date1, date2) {
    date1.setHours(0);
    date1.setMinutes(0, 0, 0);
    date2.setHours(0);
    date2.setMinutes(0, 0, 0);
    var datediff = Math.abs(date1.getTime() - date2.getTime()); // difference 
    return parseInt(datediff / (24 * 60 * 60 * 1000), 10); //Convert values days and return value      
}

ขอบคุณสำหรับการแก้ปัญหา :)
bhagirathi

วิธีแก้ปัญหาส่วนใหญ่ที่ฉันพบว่าใช้ไม่ได้ผลหรือยืดยาวเกินไป วิธีการแก้ปัญหาของคุณง่ายที่สุดและทำงานได้ตามที่ตั้งใจ! ไชโย :)
บรูซ

ถ้าฉันต้องการทราบความแตกต่างด้วยความแม่นยำมากกว่าหนึ่งชั่วโมง ในคำถามที่โพสต์มีชั่วโมงและวินาทีอะไรสำหรับศูนย์การตั้งค่านี้?
2oppin


6
var d1=new Date(2011,0,1); // jan,1 2011
var d2=new Date(); // now

var diff=d2-d1,sign=diff<0?-1:1,milliseconds,seconds,minutes,hours,days;
diff/=sign; // or diff=Math.abs(diff);
diff=(diff-(milliseconds=diff%1000))/1000;
diff=(diff-(seconds=diff%60))/60;
diff=(diff-(minutes=diff%60))/60;
days=(diff-(hours=diff%24))/24;

console.info(sign===1?"Elapsed: ":"Remains: ",
             days+" days, ",
             hours+" hours, ",
             minutes+" minutes, ",
             seconds+" seconds, ",
             milliseconds+" milliseconds.");

4

ขออภัย แต่การคำนวณแบบแบนเป็นมิลลิวินาทีไม่น่าเชื่อถือ ขอบคุณสำหรับการตอบกลับทั้งหมด แต่ฟังก์ชั่นบางอย่างที่ฉันพยายามทำล้มเหลวในวันที่ 1 วันที่ใกล้วันนี้วันที่ 2 วันที่ในปี 1970 หรือ 3 ปีในปีอธิกสุรทิน

วิธีการที่เหมาะกับฉันมากที่สุดและครอบคลุมทุกสถานการณ์เช่นปีอธิกสุรทิน, ใกล้ถึงปี 1970, 29 กุมภาพันธ์

var someday = new Date("8/1/1985");
var today = new Date();
var years = today.getFullYear() - someday.getFullYear();

// Reset someday to the current year.
someday.setFullYear(today.getFullYear());

// Depending on when that day falls for this year, subtract 1.
if (today < someday)
{
    years--;
}
document.write("Its been " + years + " full years.");

3

หากคุณใช้ moment.js มันค่อนข้างง่ายที่จะค้นหาความแตกต่างวัน

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")

3
function DateDiff(b, e)
{
    let
        endYear = e.getFullYear(),
        endMonth = e.getMonth(),
        years = endYear - b.getFullYear(),
        months = endMonth - b.getMonth(),
        days = e.getDate() - b.getDate();
    if (months < 0)
    {
        years--;
        months += 12;
    }
    if (days < 0)
    {
        months--;
        days += new Date(endYear, endMonth, 0).getDate();
    }
    return [years, months, days];
}

[years, months, days] = DateDiff(
    new Date("October 21, 1980"),
    new Date("July 11, 2017")); // 36 8 20

3

ฉันคิดว่าสิ่งนี้ควรทำ

let today = new Date();
let form_date=new Date('2019-10-23')
let difference=form_date>today ? form_date-today : today-form_date
let diff_days=Math.floor(difference/(1000*3600*24))

2

นี่คือวิธีที่คุณสามารถใช้ความแตกต่างระหว่างวันที่โดยไม่มีกรอบ

function getDateDiff(dateOne, dateTwo) {
        if(dateOne.charAt(2)=='-' & dateTwo.charAt(2)=='-'){
            dateOne = new Date(formatDate(dateOne));
            dateTwo = new Date(formatDate(dateTwo));
        }
        else{
            dateOne = new Date(dateOne);
            dateTwo = new Date(dateTwo);            
        }
        let timeDiff = Math.abs(dateOne.getTime() - dateTwo.getTime());
        let diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));
        let diffMonths = Math.ceil(diffDays/31);
        let diffYears = Math.ceil(diffMonths/12);

        let message = "Difference in Days: " + diffDays + " " +
                      "Difference in Months: " + diffMonths+ " " + 
                      "Difference in Years: " + diffYears;
        return message;
     }

    function formatDate(date) {
         return date.split('-').reverse().join('-');
    }

    console.log(getDateDiff("23-04-2017", "23-04-2018"));

1

function daysInMonth (month, year) {
    return new Date(year, month, 0).getDate();
}
function getduration(){

let A= document.getElementById("date1_id").value
let B= document.getElementById("date2_id").value

let C=Number(A.substring(3,5))
let D=Number(B.substring(3,5))
let dif=D-C
let arr=[];
let sum=0;
for (let i=0;i<dif+1;i++){
  sum+=Number(daysInMonth(i+C,2019))
}
let sum_alter=0;
for (let i=0;i<dif;i++){
  sum_alter+=Number(daysInMonth(i+C,2019))
}
let no_of_month=(Number(B.substring(3,5)) - Number(A.substring(3,5)))
let days=[];
if ((Number(B.substring(3,5)) - Number(A.substring(3,5)))>0||Number(B.substring(0,2)) - Number(A.substring(0,2))<0){
days=Number(B.substring(0,2)) - Number(A.substring(0,2)) + sum_alter
}

if ((Number(B.substring(3,5)) == Number(A.substring(3,5)))){
console.log(Number(B.substring(0,2)) - Number(A.substring(0,2)) + sum_alter)
}

time_1=[]; time_2=[]; let hour=[];
 time_1=document.getElementById("time1_id").value
 time_2=document.getElementById("time2_id").value
  if (time_1.substring(0,2)=="12"){
     time_1="00:00:00 PM"
  }
if (time_1.substring(9,11)==time_2.substring(9,11)){
hour=Math.abs(Number(time_2.substring(0,2)) - Number(time_1.substring(0,2)))
}
if (time_1.substring(9,11)!=time_2.substring(9,11)){
hour=Math.abs(Number(time_2.substring(0,2)) - Number(time_1.substring(0,2)))+12
}
let min=Math.abs(Number(time_1.substring(3,5))-Number(time_2.substring(3,5)))
document.getElementById("duration_id").value=days +" days "+ hour+"  hour " + min+"  min " 
}
<input type="text" id="date1_id" placeholder="28/05/2019">
<input type="text" id="date2_id" placeholder="29/06/2019">
<br><br>
<input type="text" id="time1_id" placeholder="08:01:00 AM">
<input type="text" id="time2_id" placeholder="00:00:00 PM">
<br><br>
<button class="text" onClick="getduration()">Submit </button>
<br><br>
<input type="text" id="duration_id" placeholder="days hour min">


รหัสนี้ให้ผลลัพธ์ที่ถูกต้องเกี่ยวกับจำนวนวันเวลาและแม้แต่นาที
Maximus Su

หวังว่าพวกคุณจะใช้มัน
Maximus Su

0

ตกลงมีหลายวิธีที่คุณสามารถทำได้ ใช่คุณสามารถใช้ JS เก่าธรรมดา เพียงแค่พยายามที่:

let dt1 = new Date()
let dt2 = new Date()

ลองเลียนแบบข้อความโดยใช้ Date.prototype.setMinutes และตรวจสอบให้แน่ใจว่าเราอยู่ในช่วง

dt1.setMinutes(7)
dt2.setMinutes(42)
console.log('Elapsed seconds:',(dt2-dt1)/1000)

หรือคุณสามารถใช้ห้องสมุดบางอย่างเช่นjs-jodaซึ่งคุณสามารถทำสิ่งนี้ได้อย่างง่ายดาย (โดยตรงจากเอกสาร):

var dt1 = LocalDateTime.parse("2016-02-26T23:55:42.123");
var dt2 = dt1
  .plusYears(6)
  .plusMonths(12)
  .plusHours(2)
  .plusMinutes(42)
  .plusSeconds(12);

// obtain the duration between the two dates
dt1.until(dt2, ChronoUnit.YEARS); // 7
dt1.until(dt2, ChronoUnit.MONTHS); // 84
dt1.until(dt2, ChronoUnit.WEEKS); // 356
dt1.until(dt2, ChronoUnit.DAYS); // 2557
dt1.until(dt2, ChronoUnit.HOURS); // 61370
dt1.until(dt2, ChronoUnit.MINUTES); // 3682242
dt1.until(dt2, ChronoUnit.SECONDS); // 220934532

มีไลบรารีจำนวนมาก ofc แต่ js-joda มีโบนัสเพิ่มเติมของการมีอยู่ใน Java ซึ่งได้รับการทดสอบอย่างกว้างขวาง การทดสอบทั้งหมดเหล่านั้นถูกย้ายไปที่ js-joda ก็ยังไม่เปลี่ยนรูป


-1

สิ่งนี้น่าจะใช้ได้ผลถ้าคุณต้องการแสดงเวลาที่เหลือเนื่องจาก JavaScript ใช้เฟรมในเวลานั้นคุณจะได้เวลาสิ้นสุด - เวลา RN หลังจากนั้นเราสามารถหาร 1,000 ได้ตั้งแต่ 1,000 เฟรม = 1 วินาที หลังจากนั้นคุณสามารถใช้คณิตศาสตร์พื้นฐานของเวลา แต่ยังคงมีปัญหากับรหัสนี้เนื่องจากการคำนวณเป็นแบบคงที่มันไม่สามารถชดเชยยอดรวมของวันที่แตกต่างกันในหนึ่งปี (360/365/366) พวงของ ถ้าหลังจากการคำนวณคือทำให้มันว่างถ้าเวลาน้อยกว่า 0 หวังว่ามันจะช่วยได้แม้ว่ามันจะไม่ใช่สิ่งที่คุณถาม :)

var now = new Date();
var end = new Date("End Time");
var total = (end - now) ;
var totalD =  Math.abs(Math.floor(total/1000));

var years = Math.floor(totalD / (365*60*60*24));
var months = Math.floor((totalD - years*365*60*60*24) / (30*60*60*24));
var days = Math.floor((totalD - years*365*60*60*24 - months*30*60*60*24)/ (60*60*24));
var hours = Math.floor((totalD - years*365*60*60*24 - months*30*60*60*24 - days*60*60*24)/ (60*60));
var minutes = Math.floor((totalD - years*365*60*60*24 - months*30*60*60*24 - days*60*60*24 - hours*60*60)/ (60));
var seconds = Math.floor(totalD - years*365*60*60*24 - months*30*60*60*24 - days*60*60*24 - hours*60*60 - minutes*60);

var Y = years < 1 ? "" : years + " Years ";
var M = months < 1 ? "" : months + " Months ";
var D = days < 1 ? "" : days + " Days ";
var H = hours < 1 ? "" : hours + " Hours ";
var I = minutes < 1 ? "" : minutes + " Minutes ";
var S = seconds < 1 ? "" : seconds + " Seconds ";
var A = years == 0 && months == 0 && days == 0 && hours == 0 && minutes == 0 && seconds == 0 ? "Sending" : " Remaining";

document.getElementById('txt').innerHTML = Y + M + D + H + I + S + A;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.