Προς το περιεχόμενο

php time()


lion2486

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας, θέλω να χρησιμοποιήσω την 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...
   }

είναι σωστή η σκέψη μου?

Δημοσ.

Νομίζω ότι μπορείς να το κάνεις πιο εύκολα με την 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

Δημοσ.

Το πιο σωστο κατα την αποψη μου ειναι να γραψεις το query σου ετσι ωστε να παίρνει οσα ειναι απο 6 μηνες και πριν..

hint date_diff ισως σε βοηθησει

 

---------- Το μήνυμα προστέθηκε στις 22:14 ----------

 

Αν θες διαγραφη φτιαχνεις query σβησιματος με διαφορα 6 μηνων

Δημοσ.

ναι, πώς το κάνω όμως αυτό?

επίσης, το πρόβλημά μου είναι πως στη βάση δεδομένων είναι καταχωρημένα ήδη με την εντολή time().

Δημοσ.
Νομίζω ότι μπορείς να το κάνεις πιο εύκολα με την 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...

Δημοσ.
πρόσεχε λίγο... 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);


?> 

 

*: Πηγή

Δημοσ.

Διαβασε το manual της mysql...Η datediff ειναι πιο δυσκολη .Στο περιπου

 

μπλα μπλα WHERE stilisoy < DATE_SUB(now(), INTERVAL 6 MONTH);

 

δινει.. αν καλεσω την εντολη..

'2009-03-16 22:39:37'

Δημοσ.

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;

Κάτι τέτοιο δεν σου κάνει;

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...