Roland Δημοσ. 10 Δεκεμβρίου 2010 Δημοσ. 10 Δεκεμβρίου 2010 Γεια σας Έχω μια φόρμα με ένα πεδίο ημερομηνίας που βάζοντας ο χρήστης μια προγενέστερη ημερομηνία το script μας λέει πόσοι μήνες μεσολαβούν. Δείτε εδώ ένα demo Ο κώδικας είναι: var date1 = $('#date1').val(); var minutes = 1000*60; var hours = minutes*60; var days = hours*24; var foo_date1 = getDateFromFormat("10/11/2010", "d/M/y"); var foo_date2 = new Date(); var diff_date = Math.round((foo_date2 - foo_date1)/days); var Result = ("Οι μήνες που μεσολαβούν είναι: " + diff_date ); Τώρα την ημερομηνία δε την παίρνει από το πεδίο αλλά είναι απευθείας γραμμένη στον κώδικα. Τι αλλαγή πρέπει να κάνω για να παίρνει την ημερομηνία από το πεδίο "date1" ? δοκίμασα var foo_date1 = getDateFromFormat(date1, "d/M/y"); αλλά μου επιστρέφει πολύ μεγάλο αριθμό μηνών. Αν ξέρει κάποιος ας μου πει. Ευχαριστώ
orotoi Δημοσ. 10 Δεκεμβρίου 2010 Δημοσ. 10 Δεκεμβρίου 2010 Για αρχή.. this aint jim beam (εεε... jquery ήθελα να πω). > <html> <head> <title>dates shit</title> <script language="javascript" src="date.js"></script> </head> <body> <form> <input type="text" name="date1" value="" size=10> <input type="text" name="output" value="" size=10> <input type="button" value="Go!" onClick="this.form.output.value= Math.ceil((new Date() - new Date(getDateFromFormat(this.form.date1.value,'d/M/y')))/1000/60/60/24/30)"> </form> </body> </html> Με αυτό θα έχεις περίπου αυτό που θες. Για να έχεις διαφορά σε μέρες βγάζεις το "δια 30" απο τη διαίρεση. Επίσης αναλόγως τι θα χρησιμοποιήσεις (round, ceil, floor) θα έχεις διαφορετικό αποτέλεσμα. Με το ceil ας πούμε απο τις 30/10/2010 έχουν περάσει 2 μήνες ενώ με floor έχει περάσει 1 μήνας. Επίσης δεν έχω ιδέα τι γίνεται για τα δίσεκτα.. δε το δοκίμασα.
Roland Δημοσ. 10 Δεκεμβρίου 2010 Μέλος Δημοσ. 10 Δεκεμβρίου 2010 orotoi ευχαριστώ πολύ για την απάντηση και τη βοήθεια προσάρμοσα την πρόταση σου με προσθήκη <form> </form> demo1 και ο jquery έγινε έτσι > var date1 = $('#date1').val(); var minutes = 1000*60; var hours = minutes*60; var days = hours*24; var months = days*30; var foo_date1 = getDateFromFormat(this.form.date1.value, "d/M/y"); var foo_date2 = new Date(); var diff_date = Math.round((foo_date2 - foo_date1)/months); var Result = ("Οι μήνες που μεσολαβούν είναι: " + diff_date ); $("#ResultText").text(Result).hide().fadeIn(400); $("#Border").hide().fadeIn(400); Σκευτόμουν αν υπάρχει τρόπος αντί να κανουμε φόρμα var foo_date1 = getDateFromFormat(this.form.date1.value, "d/M/y"); να προσθεσουμε το πεδίο date1 σαν μεταβλητή πχ var foo_date1 = getDateFromFormat(date1, "d/M/y"); ή var foo_date1 = getDateFromFormat($('#date1').val(), "d/M/y"); ή var foo_date1 = getDateFromFormat(('#date1').val(), "d/M/y"); δοκίμασα πολλές εκδοχές αλλα καμιά δε δούλεψε
orotoi Δημοσ. 10 Δεκεμβρίου 2010 Δημοσ. 10 Δεκεμβρίου 2010 ε αυτό έχεις κάνει απλώς αντι να θέσεις μια μεταβλητή με την τιμή του input χρησιμοποιείς κατευθείαν το this.form.... λογικά μπορείς να πεις date1 = this.form.... Αλλά ποιό το νόημα? Περιττό επίσης μου φαίνεται να υπολογίζεις τα minutes,hours,dates κτλ.. Βάλε κατευθείαν στο months το αποτέλεσμα του 1000*60*60*24*30 (καλά οχι οτι είναι καμιά σημαντική επιβάρυνση.. αλλά λέμε τώρα.. έτσι για τη κ@υλα..) Επίσης δε ξέρω πόσο critical είναι αυτό που θες να κάνεις και τι ακρίβεια θες. Οπως σου είπα πριν ανάλογα τι θα χρησιμοποιήσεις (ceil, floor κτλ) θα έχεις άλλο αποτέλεσμα.
Roland Δημοσ. 10 Δεκεμβρίου 2010 Μέλος Δημοσ. 10 Δεκεμβρίου 2010 Επίσης δε ξέρω πόσο critical είναι αυτό που θες να κάνεις και τι ακρίβεια θες. Οπως σου είπα πριν ανάλογα τι θα χρησιμοποιήσεις (ceil, floor κτλ) θα έχεις άλλο αποτέλεσμα. Αυτό που προσπαθώ να κάνω για έναν φίλο μου που έχει μια σελίδα με pets είναι μια φόρμα για online υπολογισμό του επόμενου εμβολίου. Περισσότερο όμως το κάνω για να ασχοληθώ και να καταλάβω πως λειτουργούν κάποια πράγματα σε σχέση με τη javascript και την jquery, και η αλήθεια είναι ότι με όλο αυτό το ψάξιμο που έκανα και με τη δική σου βοήθεια βοηθήθηκα πάρα πολύ. Θα μπορούσα να κάνω ένα post και να πω "Παιδιά θέλω να κάνω αυτό κι αυτό...πως γίνεται?" και είμαι σίγουρος πως κάποιος από το forum θα μου έδινε την πλήρη λύση. Αλλά εγώ δε καίγομαι τόσο πολύ για την πλήρη λύση, όσο για την εξοικείωση και για τη γνώση. Οπότε να ξέρεις ότι εκτίμησα ιδιαίτερα τις απαντήσεις σου και σ' ευχαριστώ. Τώρα σχετικά με το script εφόσον κατάφερα να βρίσκω το πλήθος των μηνών επόμενος στόχος είναι το μήνυμα που βγάζει να μην είναι "Οι μήνες που μεσολαβούν είναι: 11" Αλλά αν οι μήνες είναι < από το 12 Μήνυμα: " Ο εμβολιασμός πρέπει να γίνει στις 15/1/2011" αν οι μήνες είναι > από το 12 Μήνυμα: " Ο εμβολιασμός έπρεπε να γίνει στις 15/1/2011. Παρακαλούμε επικοινωνήστε μαζί μας" Θα προσπαθήσω να το κάνω , θεωρητικά ξέρω τι πρέπει να γίνει, αλλά δε γνωρίζω πώς να το διατυπώσω. Οπότε αν τα βρω σκούρα θα ξαναρωτήσω.
orotoi Δημοσ. 10 Δεκεμβρίου 2010 Δημοσ. 10 Δεκεμβρίου 2010 καλή φάση.. και δω καθόμαστε (η αδερφή δλδ αλλα οκ) και τα γράφουμε στο βιβλιάριο του.. χαχαα.. θα της φτιάξω κανα τέτοιο.. Αν παίζεις με mysql.. μπορείς να έχεις ενα πίνακα με όποια στοιχεία του χρήστη θέλεις (και του σκύλου ή άλλου pet τελος πάντων) και ενα πεδίο με την τελευταία ημερομηνία εμβολιασμού ένα πεδίο με την επόμενη ημ/νια εμβολιασμού (θα υπολογίζεται απο την τελευταία + <χρόνο>* και όταν ο χρήστης κάνει login θα του εμφανίζει απλώς την επόμενη ημ/νια εμβολιασμού και ίσως τις ημέρες που πλησιάζουν σε αυτή να του το εμφανίζει με ενα διαφορετικό τρόπο υπενθύμισης.. πχ "Να θυμηθείς σε 9 μέρες να εμβολιάσεις τον <όνομα_σκύλου>!" *<χρόνο>, αυτό μπορείς να το έχεις σε ενα άλλο πίνακα που θα συσχετίζεις τύπο εμβολίου με απαιτούμενο χρόνο, αφού κάποια εμβόλια θέλουν να γίνονται ανα διαφορετικά χρονικά διαστήματα (έχω την εντύπωση). Οπότε έχεις ενα πίνακα με τα στοιχεία του χρήστη και άλλο πίνακα με τα στοιχεία του σκύλου όπου σε αυτόν θα έχεις τα εμβόλια που έχει κάνει για παράδειγμα και αντίστοιχα τις ημερομηνίες τους και το πότε είναι η επόμενη για το καθένα.. Ψήθηκα..
Roland Δημοσ. 10 Δεκεμβρίου 2010 Μέλος Δημοσ. 10 Δεκεμβρίου 2010 Έκανα μια πρόοδο demo2 Πρόσθεσα τον κώδικα > var diff_date = Math.round((foo_date2 - foo_date1)/months); if (diff_date > 12) {var Result = ("Ο εμβολιασμός έπρεπε να γίνει. Παρακαλούμε επικοινωνήστε μαζί μας");} if (diff_date < 12) {var Result = ("Ο εμβολιασμός πρεπε να γίνει.");} $("#ResultText").text(Result).hide().fadeIn(400); και παίρνω διαφορετικό μήνυμα εάν οι μήνες είναι πάνω από 12 ή όχι. Κάτι που δεν μπορώ όμως να κάνω είναι να υπολογίσω την νέα ημερομηνία εμβολίου. demo3 Έκανα το εξής > var diff_date = Math.round((foo_date2 - foo_date1)/months); var new_date = Math.round(foo_date1 + 12); if (diff_date > 12) {var Result = ("Παρακαλούμε επικοινωνήστε μαζί μας.Ο εμβολιασμός έπρεπε να γίνει " + new_date);} if (diff_date < 12) {var Result = ("Ο εμβολιασμός πρέπει να γίνει " + new_date);} Δηλαδή πρόσθεσα το foo_date1 + 12, αλλά καταλαβαίνω οτι δεν είναι σωστό γιατί το foo_date1 είναι ημερομηνία και το 12 είναι αριθμός. Άρα πως μπορούμε να κάνουμε αυτόν τον υπολογισμό?
orotoi Δημοσ. 10 Δεκεμβρίου 2010 Δημοσ. 10 Δεκεμβρίου 2010 αν του προσθέσεις 31104000000 ? --edit-- άκυρο.. ενας χρόνος (365 μέρες) είναι 31536000000 Παραδόξως το 3110400.... είναι ενα tun (ενας χρόνος των Μάγιας.. 360μέρες)
Roland Δημοσ. 10 Δεκεμβρίου 2010 Μέλος Δημοσ. 10 Δεκεμβρίου 2010 Μπα Σίγουρα θα υπάρχει κάποιος τρόπος να μπορούμε σε μια ημερομηνία να προσθέσουμε 12 μήνες και να μας δώσει το αποτέλεσμα σε ημερομηνία πάλι.
Roland Δημοσ. 10 Δεκεμβρίου 2010 Μέλος Δημοσ. 10 Δεκεμβρίου 2010 Εννοείς αυτό? > var new_date = Math.round(foo_date2 + 31536000000 ); if (diff_date > 12) {var Result = ("Παρακαλούμε επικοινωνήστε μαζί μας.Ο εμβολιασμός έπρεπε να γίνει " + new_date);} if (diff_date < 12) {var Result = ("Ο εμβολιασμός πρεπεi να γίνει " + new_date);} $("#ResultText").text(Result).hide().fadeIn(400); δηλαδή στη foo_date2 να προσθέσουμε τα 31536000000 οκ αλλα σαν αποτελεσμα μου δίνει NaN
Roland Δημοσ. 10 Δεκεμβρίου 2010 Μέλος Δημοσ. 10 Δεκεμβρίου 2010 Έκανα μισό βήμα ακόμη demo3 Πρόσθεσα var new_date = new Date(this.form.date1.value); // Για να πάρω την ημερομηνία απο τη φόρμα new_date.setMonth( new_date.getMonth() + 12 ); // Για να προσθεσω + 12 μήνες Αποτέλεσμα για ημερομηνία 10/11/2008 Μήνυμα : Παρακαλούμε επικοινωνήστε μαζί μας.Ο εμβολιασμός έπρεπε να γίνει Sun Oct 11 2009 00:00:00 GMT+0300 εδώ τώρα εκτος απο τη διαφορετική μορφή της ημερομηνίας αλλάζει το μήνα με τη μέρα (μορφή M/d/y)
Επισκέπτης Δημοσ. 10 Δεκεμβρίου 2010 Δημοσ. 10 Δεκεμβρίου 2010 δεν θυμάμαι τώρα αν η js υποστηρίζει date formatting αλλά ένας χαζός τρόπος είναι ο παρακάτω > function getDateFormatted(new_date){ var day = new_date.getDate(); var month = new_date.getMonth() + 1; var year = new_date.getFullYear(); return day + "/" + month + "/" + year; }
Roland Δημοσ. 10 Δεκεμβρίου 2010 Μέλος Δημοσ. 10 Δεκεμβρίου 2010 natural_sgf ευχαριστώ για τη βοήθεια μια ερώτηση το αποτέλεσμα της function που έδωσες το πέρνουμε πάλι με τη μεταβλητή new_date? πχ > function getDateFormatted( ){ var day = new_date.getDate(); var month = new_date.getMonth() + 1; var year = new_date.getFullYear(); return day + "/" + month + "/" + year; } if (diff_date > 12) {var Result = ("Παρακαλούμε επικοινωνήστε μαζί μας.Ο εμβολιασμός έπρεπε να γίνει " + new_date);} if (diff_date < 12) {var Result = ("Ο εμβολιασμός πρεπεi να γίνει " + new_date);}
Επισκέπτης Δημοσ. 10 Δεκεμβρίου 2010 Δημοσ. 10 Δεκεμβρίου 2010 > function getDateFormatted(new_date){ var day = new_date.getDate(); var month = new_date.getMonth() + 1; var year = new_date.getFullYear(); return day + "/" + month + "/" + year; } if (diff_date > 12) {var Result = ("Παρακαλούμε επικοινωνήστε μαζί μας.Ο εμβολιασμός έπρεπε να γίνει " + getDateFormatted(new_date));} if (diff_date < 12) {var Result = ("Ο εμβολιασμός πρεπεi να γίνει " + getDateFormatted(new_date));}
orotoi Δημοσ. 10 Δεκεμβρίου 2010 Δημοσ. 10 Δεκεμβρίου 2010 αυτό φαίνεται να δουλεύει.. > var foo = Math.round(new Date(getDateFromFormat(this.form.date1.value,'d/M/y')))+31536000000; alert(new Date(foo))"
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.