lion2486 Δημοσ. 15 Σεπτεμβρίου 2009 Δημοσ. 15 Σεπτεμβρίου 2009 Γεια σας, θέλω να χρησιμοποιήσω την php για να αφαιρώ rows από μία mysql, μου να έχουν στο `lastactive` 6 μήνες πριν, για αυτό χρησιμοποιώ την εντολή time(). Ερώτηση τώρα... με αυτή την εντολή πώς καταγράφεται η ημερομηνία με μοναδικό τρόπο? παίζει ρόλο η timezone του server ή η δική μου? 6 μήνες υπολογίζεται >time()-(6*4*7 * 24 * 60 * 60); ? και για να το κάνω αυτό θα δώσω: > $tmp=time()-(6*4*7 * 24 * 60 * 60); if($lastactive<=$tmp) { //delete... } είναι σωστή η σκέψη μου?
macabre_sunsets Δημοσ. 15 Σεπτεμβρίου 2009 Δημοσ. 15 Σεπτεμβρίου 2009 Νομίζω ότι μπορείς να το κάνεις πιο εύκολα με την date(). Μπορείς να πάρεις τον τωρινό μήνα δίνοντας date('n') ... Επιστρέφει 1-12. Υποθέτω ότι θα έχεις και στην SQL ένα timestamp, από το οποίο θα μπορείς να πάρεις τον μήνα. Στην συνέχεια κάνε την σύγκριση που θέλεις. Ίσως το ακόλουθο να κάνει : >$current_month = date('n', time()); if ((date('n', $row['ημερομηνία']) - $current_month) > 6) { //delete row } Μιας και η PHP είναι server-sided, νομίζω θα παίρνει ημερομηνία από τον server, οπότε δεν έχει καμία σχέση το δικό σου timezone. *: Το παραπάνω δεν είναι δοκιμασμένο και είναι απλά μια σκέψη. Στα πρώτα βήματα είμαι στην PHP
ΠάρηςΓ Δημοσ. 15 Σεπτεμβρίου 2009 Δημοσ. 15 Σεπτεμβρίου 2009 Το πιο σωστο κατα την αποψη μου ειναι να γραψεις το query σου ετσι ωστε να παίρνει οσα ειναι απο 6 μηνες και πριν.. hint date_diff ισως σε βοηθησει ---------- Το μήνυμα προστέθηκε στις 22:14 ---------- Αν θες διαγραφη φτιαχνεις query σβησιματος με διαφορα 6 μηνων
lion2486 Δημοσ. 16 Σεπτεμβρίου 2009 Μέλος Δημοσ. 16 Σεπτεμβρίου 2009 ναι, πώς το κάνω όμως αυτό? επίσης, το πρόβλημά μου είναι πως στη βάση δεδομένων είναι καταχωρημένα ήδη με την εντολή time().
macabre_sunsets Δημοσ. 16 Σεπτεμβρίου 2009 Δημοσ. 16 Σεπτεμβρίου 2009 date('μέρα μήνας χρόνος ότι θες', time()); Όπου time() βάζεις το row από την SQL. Έτσι μετατρέπεις το timestamp σε ότι θέλεις.
lion2486 Δημοσ. 16 Σεπτεμβρίου 2009 Μέλος Δημοσ. 16 Σεπτεμβρίου 2009 Νομίζω ότι μπορείς να το κάνεις πιο εύκολα με την date(). Μπορείς να πάρεις τον τωρινό μήνα δίνοντας date('n') ... Επιστρέφει 1-12. Υποθέτω ότι θα έχεις και στην SQL ένα timestamp, από το οποίο θα μπορείς να πάρεις τον μήνα. Στην συνέχεια κάνε την σύγκριση που θέλεις. Ίσως το ακόλουθο να κάνει : $current_month = date('n', time()); if ((date('n', $row['ημερομηνία']) - $current_month) > 6) { //delete row } Μιας και η PHP είναι server-sided, νομίζω θα παίρνει ημερομηνία από τον server, οπότε δεν έχει καμία σχέση το δικό σου timezone. *: Το παραπάνω δεν είναι δοκιμασμένο και είναι απλά μια σκέψη. Στα πρώτα βήματα είμαι στην PHP πρόσεχε λίγο... 20 λεπτά έκανα να βρώ το λάθος... m -> month n->?? ευχαριστώ και πάλι.. date('μέρα μήνας χρόνος ότι θες', time()); Όπου time() βάζεις το row από την SQL. Έτσι μετατρέπεις το timestamp σε ότι θέλεις. Λοιπόν, στην αρχή με το date('d-m-y',$row['lastactive']) Μου φαινόταν οκ... μετά δοκίμασα > if (((date('m', $row['lastactive']) + 6) <= date('m')) && (date('d',$row['lastactive']) <= date('d')) || (date('y',$row['lastactive']) < date('y'))) { //code } και μέσα το date('d-m-y',$row['lastactive']) και μου έβγαζε άκυρα... χρονολογίες 00-70-κτλ... μέσα έχει μόνο 08-09...
macabre_sunsets Δημοσ. 16 Σεπτεμβρίου 2009 Δημοσ. 16 Σεπτεμβρίου 2009 πρόσεχε λίγο... 20 λεπτά έκανα να βρώ το λάθος... m -> month n->?? ευχαριστώ και πάλι.. Διάβασε λίγο... Μέσα σε αυτά τα 20 λεπτά δεν σκέφτηκες να δεις το "manual" της date? Παράθεση από το PHP: date - Manual >m Numeric representation of a month, with leading zeros 01 through 12 M A short textual representation of a month, three letters Jan through Dec [b]n Numeric representation of a month, without leading zeros 1 through 12[/b] Και όπως σου είπα στο πρώτο post που έκανα : Μπορείς να πάρεις τον τωρινό μήνα δίνοντας date('n') ... Επιστρέφει 1-12[/b']. Ο ΠάρηςΓ ανέφερε (πολύ σωστά) την date_diff. Νομίζω είναι καλύτερο να την χρησιμοποιήσεις μιας και θα απλουστεύσει αρκετά την διαδικασία. Κάτι που δεν είχα σκεφτεί όταν σου πρότεινα την λύση στην πρώτη απάντηση μου είναι τι γίνεται όταν οι μήνες ανήκουν σε διαφορετικό έτος. Κάτι ενδεικτικό για να βρεις την διαφορά ημερομηνιών : ><?php function date_diff($date, $date2 = 0) { if(!$date2) $date2 = mktime(); $date_diff = array('seconds' => '', 'minutes' => '', 'hours' => '', 'days' => '', 'weeks' => '', 'tseconds' => '', 'tminutes' => '', 'thours' => '', 'tdays' => '', 'tdays' => ''); //////////////////// if($date2 > $date) $tmp = $date2 - $date; else $tmp = $date - $date2; $seconds = $tmp; // Relative //////// $date_diff['weeks'] = floor($tmp/604800); $tmp -= $date_diff['weeks'] * 604800; $date_diff['days'] = floor($tmp/86400); $tmp -= $date_diff['days'] * 86400; $date_diff['hours'] = floor($tmp/3600); $tmp -= $date_diff['hours'] * 3600; $date_diff['minutes'] = floor($tmp/60); $tmp -= $date_diff['minutes'] * 60; $date_diff['seconds'] = $tmp; // Total /////////// $date_diff['tweeks'] = floor($seconds/604800); $date_diff['tdays'] = floor($seconds/86400); $date_diff['thours'] = floor($seconds/3600); $date_diff['tminutes'] = floor($seconds/60); $date_diff['tseconds'] = $seconds; return $date_diff; } $time1 = time(); $time2 = time() + 5000000; $diff = date_diff($time1, $time2); echo "There are {$diff['weeks']} weeks, {$diff['days']} days, {$diff['hours']} hours, {$diff['minutes']} minutes and {$diff['seconds']} secs between " . date('c', $time1) . " and " . date('c', $time2); ?> *: Πηγή
devnull Δημοσ. 16 Σεπτεμβρίου 2009 Δημοσ. 16 Σεπτεμβρίου 2009 Γιατι δεν χρησιμοποιείς τα Date Functions της Mysql? DATE_ADD | DATE_DIFF ?
ΠάρηςΓ Δημοσ. 16 Σεπτεμβρίου 2009 Δημοσ. 16 Σεπτεμβρίου 2009 Διαβασε το manual της mysql...Η datediff ειναι πιο δυσκολη .Στο περιπου μπλα μπλα WHERE stilisoy < DATE_SUB(now(), INTERVAL 6 MONTH); δινει.. αν καλεσω την εντολη.. '2009-03-16 22:39:37'
PavelX Δημοσ. 17 Σεπτεμβρίου 2009 Δημοσ. 17 Σεπτεμβρίου 2009 http://gr2.php.net/strtotime >[color=#000000][color=#0000BB]<?php [/color][color=#007700]echo [/color][color=#0000BB]strtotime[/color][color=#007700]([/color][color=#DD0000]"now"[/color][color=#007700]), [/color][color=#DD0000]"\n"[/color][color=#007700]; echo [/color][color=#0000BB]strtotime[/color][color=#007700]([/color][color=#DD0000]"10 September 2000"[/color][color=#007700]), [/color][color=#DD0000]"\n"[/color][color=#007700]; echo [/color][color=#0000BB]strtotime[/color][color=#007700]([/color][color=#DD0000]"+1 day"[/color][color=#007700]), [/color][color=#DD0000]"\n"[/color][color=#007700]; echo [/color][color=#0000BB]strtotime[/color][color=#007700]([/color][color=#DD0000]"+1 week"[/color][color=#007700]), [/color][color=#DD0000]"\n"[/color][color=#007700]; echo [/color][color=#0000BB]strtotime[/color][color=#007700]([/color][color=#DD0000]"+1 week 2 days 4 hours 2 seconds"[/color][color=#007700]), [/color][color=#DD0000]"\n"[/color][color=#007700]; echo [/color][color=#0000BB]strtotime[/color][color=#007700]([/color][color=#DD0000]"next Thursday"[/color][color=#007700]), [/color][color=#DD0000]"\n"[/color][color=#007700]; echo [/color][color=#0000BB]strtotime[/color][color=#007700]([/color][color=#DD0000]"last Monday"[/color][color=#007700]), [/color][color=#DD0000]"\n"[/color][color=#007700]; [/color][color=#0000BB]?>[/color][/color] >$now = time(); $past = strtotime("-6 months", $now); $sql = "SELECT * FROM my_table WHERE time_field >= " . $past; Κάτι τέτοιο δεν σου κάνει;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.