1

基本的に私が理解できないのは、オブジェクトの Date プロパティ (誕生日 - HTML の Date タイプ入力から取得) を取得し、それを使用して「次の誕生日までの日数」プロパティをオブジェクトに追加する方法です。次に例を示します。

var surnameField,firstNameField,birthdayField, phoneField, addressField, postField, emailField, groupField ;  //Declaring variables for the fields

var Contact = function(surname,firstName,date, phone , address , post, email, group){
    this.surname = surname ;
    this.firstName = firstName ;
    this.birthdayDate = new Date (date) ;
    this.phone = phone;
    this.address= address;
    this.email = email;
    this.post = post;
    this.group = group;

}



var contacts = [];

var getday = function() {

    for (var i= 0, j=contacts.length;i<j;i++){
       var a = contacts[i].birthdayDate.getDate();
        contacts[i].days = a;

    }
}





Contact.prototype.tableRow = function(){
    var tr = "<tr><td>" + this.surname + "</td><td>" + this.firstName + "</td><td>" + this.birthdayDate + "</td><td>" + this.phone + "</td><td>" + this.email +
            "</td><td>" + this.address + "</td><td>" + this.post + "</td><td>" + this.group + "</td></tr>";
    return tr;
}

var addContact = function(surnameField,firstNameField,birthdayField, phoneField, addressField, postField, emailField, groupField ){
        if(surnameField.value){
            a = new Contact(surnameField.value, firstNameField.value,birthdayField.value, phoneField.value, addressField.value, postField.value, emailField.value, groupField.value);
            contacts.push(a);
        }else{ alert("Please complete all fields")}

}

var clearUI = function(){
    var white = "#fff";
    surnameField.value = "";
    surnameField.style.backgroundColor = white;
    firstNameField.value = "";
    firstNameField.style.backgroundColor = white;
    birthdayField.value="";
    birthdayField.style.backgroundColor = white;
    phoneField.value = "";
    phoneField.style.backgroundcolor = white;
    addressField.value = "";
    addressField.style.backgroundcolor = white;
    postField.value = "";
    postField.style.backgroundcolor = white;
    emailField.value = "";
    emailField.style.backgroundcolor = white;
    groupField.value="";
    groupField.style.backgroundcolor = white;
}


var updateList = function(){
    var tableDiv = document.getElementById("table"),
        table = "<table border='2'><thead><th>  Surname  </th><th> First Name</th><th>Date of Birth</th><th>  Phone Number  </th><th>  Email Address </th><th>  Address  </th><th> Postcode  </th><th>Group</th></thead>";

    for (var i= 0, j=contacts.length;i<j;i++){
        var cntct = contacts[i];
        table += cntct.tableRow();
    }
    table +="</table>";
    tableDiv.innerHTML = table;
    //getday();
    saveContacts();

}

var add = function(){
    addContact(surnameField,firstNameField,birthdayField, phoneField, addressField, postField, emailField, groupField);
    clearUI();
    updateList();
};

var saveContacts = function(){
    var cntcts = JSON.stringify(contacts);
    if (cntcts !==""){
        localStorage.contacts = cntcts;
    }else{
        alert("Could not save contacts");
    }
}

var loadContacts = function(){
    var cntcts = "";
    if(localStorage.contacts !== undefined){
        cntcts = localStorage.contacts;
        contacts = JSON.parse(cntcts);
        var proto = new Contact();
        for (var i=0; i<contacts.length; i++){
            var cntct = contacts[i]
            cntct.__proto__ = proto;
        }
    }
}

var clearContacts = function(){
    contacts = [];
    updateList()

}

/*contacts.prototype.isDue = function(){
    var now = new Date();
    if(this.birthday > now){
        return false;
    } else {
        return true;
    }
};*/



window.onload = function(){
    loadContacts();
    updateList();
    surnameField = document.getElementById("surname");
    firstNameField = document.getElementById("firstName")
    birthdayField = document.getElementById("birthday");
    phoneField = document.getElementById("phone");
    addressField = document.getElementById("address");
    postField = document.getElementById("post");
    emailField = document.getElementById("email");
    groupField = document.getElementById("group");
    addButton = document.getElementById("addButton");
    addButton.onclick = add;
    delButton = document.getElementById("delButton");
    delButton.onclick = clearContacts;
    clearUI();
}

私がやろうとしていたのは、日付オブジェクトから日/月の値を取得し、それを使用して次の誕生日までの日数を計算することでしたが、私が試したことはすべてうまくいかないようです. getDay() と getMonth() はコンソールで機能しましたが、実装すると「getDay は .birthday の deinfed メソッドではありません」タイプのエラーが発生しました。

したがって、理想的には、配列内の各オブジェクトを修正したら、「daysTilBirthday」プロパティが必要です。

どんな助けでも大歓迎です。

解決した

データがリロードされたときに、文字列ではなく日付としてリロードされたことを確認するチェックを追加するのを忘れていました。

cntct.birthdayDate = 新しい日付 (cntct.birthdayDate);

とにかく助けてくれてありがとう!

4

1 に答える 1

0

試すbirthday.getDate()

ここにフィドルがあります:http://jsfiddle.net/ZJ6CN/

于 2012-11-25T04:11:26.083 に答える