簡體   English   中英

Javascript - 使用日期函數運行模擬的原型函數

[英]Javascript - Prototype function which runs a simulation using the date function

我想在我的程序中添加兩個函數。 其中一個會將原型的可用屬性從true更改為false並設置結帳日期。 結帳日期需要設置為當前日期減去一些隨機天數(天數應隨機化)。

我的嘗試:

    Book.prototype.checkOut = function() {
    this.Available = false;
    var temp = new Date(1000000000);
    var date = new Date() - temp;
    var res = new Date(date);
    this.checkoutDate = res;
};

第二個檢查當前日期和檢出日期,如果超過14天則返回true。

我的嘗試:

    Book.prototype.isOverdue = function() {
    var singleDay = 1000 * 60 * 60 * 24;
    var todayDate = new Date().getTime();
    var difference = todayDate - this.checkoutDate.getTime();
    if (Math.round(difference / singleDay) >= 14) {
        return true;
    }
    return false;
};

我的所有代碼:

 var Book = function(title, Available, publicationDate, checkoutDate, callNumber, Authors) { this.title = title; this.Available = Available; this.publicationDate = publicationDate; this.checkoutDate = checkoutDate; this.callNumber = callNumber; this.Authors = Authors; }; var Author = function(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; }; var Patron = function(firstName, lastName, libCardNum, booksOut, fine) { this.firstName = firstName; this.lastName = lastName; this.libCardNum = libCardNum; this.booksOut = booksOut; this.fine = fine; }; Book.prototype.checkOut = function() { this.Available = false; var temp = new Date(1000000000); var date = new Date() - temp; var res = new Date(date); this.checkoutDate = res; }; Book.prototype.checkIn = function() { this.Available = true; }; Book.prototype.isOverdue = function() { var singleDay = 1000 * 60 * 60 * 24; var todayDate = new Date().getTime(); var difference = todayDate - this.checkoutDate.getTime(); if (Math.round(difference / singleDay) >= 14) { return true; } return false; }; Patron.prototype.read = function(book) { this.booksOut.add(book); } Patron.prototype.return = function(book) { this.booksOut.remove(this.booksOut.length); } var authors = []; authors[0] = new Author("Auth", "One"); authors[1] = new Author("AutL", "Two"); var catalog = []; catalog[0] = new Book('Bk1', true, new Date(2001, 1, 21), new Date(), 123456, authors); catalog[1] = new Book('Bk2', true, new Date(2002, 2, 22), new Date(), 987656, authors); catalog[2] = new Book('Bk3', true, new Date(2003, 3, 23), new Date(), 092673, authors); catalog[3] = new Book('Bk4', true, new Date(2004, 4, 24), new Date(), 658342, authors); catalog[4] = new Book('Bk5', true, new Date(2005, 5, 25), new Date(), 345678, authors); var patrons = []; patrons[0] = new Patron('Pat1', 'Wat', 1, catalog, 0.00); patrons[1] = new Patron('Pat2', 'Wot', 1, catalog, 0.00); patrons[2] = new Patron('Pat3', 'Wit', 1, catalog, 0.00); patrons[3] = new Patron('Pat4', 'Wet', 1, catalog, 0.00); patrons[4] = new Patron('Pat5', 'Wut', 1, catalog, 0.00); //while loop or for loop for 90 days //For loop over catalog //forloop over patrons //Check if available , if so check book out //If not available check book back in //check checking back in check to see if book is overdue and if so add a fine //When down loop over patrons to see their fees for (var i = 0; i < 90; i++) { for (var j = 0; j < catalog.length; j++) { for (var k = 0; k < patrons.length; k++) { var fine = patrons[k].fine; if (catalog[k].Available) { catalog[k].checkOut; } else { catalog[k].checkIn; patrons[k].read; } if (catalog[k].isOverdue) { fine = fine + 5.00; } patrons[k].fine = fine; } } } for (i = 0; i < patrons.length; i++) { console.log(patrons[i].firstName + " has checked out the following books:"); for (j = 0; j < patrons[i].booksOut.length; j++) { console.log(patrons[i].booksOut[j].title); } console.log(patrons[i].firstName + " has fine amount: $" + patrons[i].fine); } 

當我運行程序時,一切都在運行,但顧客最終會收到巨額罰款,因為這應該是一個隨機模擬,我似乎無法弄清楚我應該做些什么來解決這個問題。

你說:

結帳日期需要設置為當前日期減去一些隨機天數(天數應隨機化)。

然而,沒有任何放射:

Book.prototype.checkOut = function() {
  this.Available = false;
  var temp = new Date(1000000000);
  var date = new Date() - temp;
  var res = new Date(date);
  this.checkoutDate = res; 
};

表達式new Date(1000000000)返回1970-01-12T13的新日期:46:40.000Z,所以

new Date() - temp;

返回一個大數字,如1491816607452,大約是1726天。 它為所有書籍的所有顧客設定了相同的到期日,因此他們最終都得到同樣的罰款。

如果您想讓顧客在10至20天的隨機時段結帳,那么:

 // Return a random integer between start and end inclusive // Does not check if start or end are integers function randInRange(start, end) { return Math.floor(Math.random() * (end - start + 1)) + start; } // checkOut method as function for demo var checkOut = function() { // Set randDays to random days from 10 to 20 var randDays = randInRange(10,20); // return date minus randDays var date = new Date(); date.setDate(date.getDate() - randDays); return date; }; // Some tests, 10 dates randomly 10 to 20 days ago for (var i=10; i; i--) { console.log(checkOut().toString()); } 

checkOut方法是一個普通函數,您可以修改它以適合您的Book構造函數。 但是,不應將測試數據放大,而應將其設置為特定值,以便准確了解結果應該是什么。 此外,您應該測試已知的有問題的案例,以確保它們得到正確處理。

我沒有詳細查看其余的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM