2009-09-11 71 views
5

Tôi đã cố gắng như thế nàytính chênh lệch giữa hai ngày

<script type="text/javascript"> 
    var date2=02/09/2009; 
    var date1=03/12/2009; 
    var diff = date1.getDate()-date2.getDate(); 
    alert (diff); 

</script> 

nhưng nó không làm việc, đó là lý do getDate sẽ chỉ làm việc cho Date?

Làm cách nào để tìm sự khác biệt giữa hai ngày này? Tôi không thể sử dụng chức năng này, bởi vì tôi đang thêm javascript vào các trang apex Salesforce CRM?

Sửa 1: Infact này quá không làm việc

<script type="text/javascript"> 
    var date2= new Date ("02/09/2009"); 
    var date1= new Date ("04/09/2009"); 
    var diff = date1.getDate()-date2.getDate(); 
    alert (diff); 

</script> 

Chỉnh sửa 2: nó không làm việc quá ...

<script type="text/javascript"> 
    var date2= "02/09/2009"; 
    var date1= "04/09/2009"; 
    var diff2 = new Date(Date.parse("03/12/2009")- 
         Date.parse("02/09/2009")).toLocaleDateString(); 

// var NEW_DATE = new Date (1970, 01, 01); // var diff3 = diff2.getDate(); cảnh báo (diff2);

</script> 
+0

Cảm ơn mọi người, tôi chỉ trả lời câu trả lời nếu người dùng nhập như hình này, tôi có thể tìm ra sự khác biệt như thế nào? – joe

+2

có ai ở đây đề nghị sử dụng 'new Date ('02/09/2009 ')'? tại sao bạn mong đợi nó hoạt động? – SilentGhost

+0

Nhưng khách hàng của chúng tôi yêu cầu và đưa ra như thế này ... Vì vậy, tôi cần giải pháp cho rằng :-( – joe

Trả lời

17

<script language="JavaScript"> 
<!-- 
function dstrToUTC(ds) { 
var dsarr = ds.split("/"); 
var mm = parseInt(dsarr[0],10); 
var dd = parseInt(dsarr[1],10); 
var yy = parseInt(dsarr[2],10); 
return Date.UTC(yy,mm-1,dd,0,0,0); 
} 

function datediff(ds1,ds2) { 
var d1 = dstrToUTC(ds1); 
var d2 = dstrToUTC(ds2); 
var oneday = 86400000; 
return (d2-d1)/oneday; 
} 

// test cases are below 

var a; var b; 

a = "01/09/1999"; 
b = "01/10/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "01/12/1999"; 
b = "01/19/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "01/19/1999"; 
b = "01/12/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "01/03/1999"; 
b = "01/13/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "04/30/1999"; 
b = "05/01/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "05/30/1999"; 
b = "06/01/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "02/28/1999"; 
b = "03/01/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "02/28/2000"; 
b = "03/01/2000"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "01/01/1999"; 
b = "12/31/1999"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "01/01/2000"; 
b = "12/31/2000"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

a = "12/15/1999"; 
b = "01/15/2001"; 
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>"); 

// --> 
</script> 
0

Here được giải thích làm thế nào để tìm thấy sự khác biệt giữa hai thời điểm trong javascript

1
diff.setTime(Math.abs(date1.getTime() - date2.getTime())); 

timediff = diff.getTime(); 

weeks = Math.floor(timediff/(1000 * 60 * 60 * 24 * 7)); 
timediff -= weeks * (1000 * 60 * 60 * 24 * 7); 

days = Math.floor(timediff/(1000 * 60 * 60 * 24)); 
timediff -= days * (1000 * 60 * 60 * 24); 

hours = Math.floor(timediff/(1000 * 60 * 60)); 
timediff -= hours * (1000 * 60 * 60); 

mins = Math.floor(timediff/(1000 * 60)); 
timediff -= mins * (1000 * 60); 

secs = Math.floor(timediff/1000); 
timediff -= secs * 1000; 

alert(weeks + " weeks, " + days + " days, " + hours + " hours, " + mins + " minutes, and " + secs + " seconds"); 
+0

Bạn không nghĩ rằng đó là một chút dư thừa mà bạn đang thiết lập sự khác biệt thời gian cho một đối tượng ngày? date1.getTime() - date2.getTime() sẽ trả về sự khác biệt trong mili giây. –

1
  1. getDate() trả về ngày của tháng, trong trường hợp của bạn: 9 và 12.
  2. Bạn nên xác định rõ ràng các đối tượng ngày qua các bước sau. Các tháng là 0-based, do đó 0 = January, 1 = February ...

    var date2 = new Date (2009, 1, 9);

  3. Đây là các số, không phải là chuỗi. Khi bạn muốn sử dụng chuỗi cho ngày, thì bạn cần chính xác định dạng đó, không có gì là tùy chọn:

    var newDate = new Date ("ngày tháng, năm giờ: phút: giây"); var date2 = new Date ("ngày 9 tháng 2 năm 2009 00:00:00");

[Chỉnh sửa] giải pháp hoàn chỉnh, nếu số ngày nằm trong định dạng mm/dd/yyyy, và sự khác biệt nên trong ngày:

<script type="text/javascript"> 
    function daysFromString(dateString) 
    { 
     // split strings at/and return array 
     var splittedString = dateString.split("/"); 
     // make a new date. Caveat: Months are 0-based in JS 
     var newDate = new Date(parseInt(splittedString[2], 10), parseInt(splittedString[0], 10)-1, parseInt(splittedString[1], 10)); 
     // returns days since jan 1 1970 
     return Math.round(newDate.getTime()/(24*3600*1000)); 
    } 

    var dateString2 = "02/09/2009"; 
    var dateString1= "03/12/2009"; 
    var dateDays1 = daysFromString(dateString1); 
    var dateDays2 = daysFromString(dateString2); 
    var diff = dateDays1 - dateDays2; 
    alert (diff); 
</script> 
+0

Bạn sẽ muốn chỉ định cơ số 10 với parseInt. Nếu bạn không thì nó không xử lý đúng những thứ như "08" và "09". –

+0

Và bạn quên Thời gian tiết kiệm ánh sáng ban ngày. –

+0

@Robert L: Cảm ơn cả hai đề xuất, tôi đã chỉnh sửa câu trả lời của mình cho phù hợp. – Residuum

2

getDate là một phương pháp Date đối tượng. như bất kỳ tài liệu nào nêu rõ nó trả về ngày của tháng trong khoảng 0 đến 31. nó sẽ không có ý nghĩa để cố gắng trừ một từ khác nếu nó không phải là cùng một tháng.

1

sử dụng Date.parse (date1) - Date.parse (date2)

+0

nó trả về tôi "nan" – joe

+0

đảm bảo date1 và date2 là chuỗi – Khodor

4

date2 = 02/09/2009 không được coi là một ngày. nó hoạt động theo cách này. Đầu tiên nó đặt ra 02/09, nó trả về 0.2222222222222222 và nó được chia cho năm 2009 (0.2222222222222222/2009). cuối cùng bạn có kết quả date2 = 0.0001106133510314695. cùng một cách nó tính toán kết quả cho ngày1.

đây không phải là hoạt động hợp lệ. Nếu bạn muốn xác định ngày tháng. đảm bảo rằng, bạn đã đặt dữ liệu theo định dạng đúng ngày.

sử dụng một trong hai ngày mới() hoặc Date.parse ("02/09/2009")

Edit:

new Date(Date.parse("03/12/2009")-Date.parse("02/09/2009")).toLocaleDateString() Or 
    new Date(date1- date2).toLocaleDateString() 

isnt công việc mà .. ??

Edit:

có thể điều này sẽ làm việc .. u có thể thử này ..

Date.parse("03/12/2009")-Date.parse("02/09/2009")/(24*60*60*1000) 

và nó sẽ trả về 31 ngày

có vẻ như làm việc cho tôi .. nhưng trong múi giờ của tôi mất 03/12/2009 là ngày thứ 3 thứ 11 và năm 2009

(24 * 60 * 60 * 1000) = Số milliseco nds per day

+0

không hiển thị 01/02/1970 như thế này .. tôi chỉ muốn không có sự khác biệt ngày – joe

-1
<script type="text/javascript"> 
function GetD() 
{ 
    var date1 = new Date (2009 , 09 , 02); 
    var date2 = new Date (2009 , 12 , 03);   

    var diff = days_between (date1,date2); 
    alert (diff); 
} 
function days_between(date1, date2) { 

    // The number of milliseconds in one day 
    var ONE_DAY = 1000 * 60 * 60 * 24; 

    // Convert both dates to milliseconds 
    var date1_ms = date1.getTime(); 
    var date2_ms = date2.getTime(); 

    // Calculate the difference in milliseconds 
    var difference_ms = Math.abs(date1_ms - date2_ms); 

    // Convert back to days and return 

    return Math.round(difference_ms/ONE_DAY); 
} 
</script> 
+0

Bạn quên: đánh số tháng JavaScript bị tắt 1. –

0

có. Bạn phải sử dụng ngày đối tượng, như thế này

var d = new Date(2009,9,19); //19th october, months are 0-based 
var d2 = new Date(2009,10,12); 
var diff = (d2 - d)/60000; //diff in minutes 
alert(diff/24); //difference in hours 
0

Hãy thử

var diff2 = Date.parse("03/12/2009") - Date.parse("02/09/2009"); 

Nó sẽ cung cấp cho bạn phần chênh lệch giữa số ngày trong mili giây. Chia số này cho 86.400.000 và chênh lệch sẽ được tính theo ngày.

Các vấn đề liên quan