Διαφορα ημερομηνίας σε ημερες

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
zirico3
Δημοσιεύσεις: 23
Εγγραφή: 24 Οκτ 2006 01:47

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από zirico3 » 18 Σεπ 2012 16:19

Καλησπέρα σε όλους.Προσπαθώ να φτιάξω ένα ένα απλό πρόγραμμα που να αλλάζει το χρώμα στην ταμπέλα ανάλογα με το ποσες μέρες απομένουν για την λήξη ενός πιστοποιητικού. Προσπάθησα να το κάνω με αυτόν το τρόπο αλλα το αποτέλεσμα που μου δίνει είναι πάντα μηδέν.Μήπως μπορείτε να με βοηθήσετε γιατί είμαι πολύ αρχάριος με τον προγραμματισμό?

Κώδικας: Επιλογή όλων

   <?php
        
$today=time&#40;"Y-m-d"&#41;;
$expire = time&#40;2008-12-13&#41;;

$today1=  strtotime&#40;$today&#41;;
$expire1=  strtotime&#40;$expire&#41;;

$diff=$today1-$expire1;

if &#40;$diff<180 AND $diff>60&#41; 
    &#123;
    $highlightclass="red";
    &#125;
elseif &#40;$diff<60&#41;
&#123;
    $highlightclass="yellow";
&#125;
else
&#123;
    $$highlightclass="";
&#125;
  echo " <table width='200' border='1' cellspacing='3' cellpadding='3'>
  <tr>
    <th scope='col'>1</th>
    <th scope='col'>2</th>
    <th scope='col'>3</th>
  </tr>
  <tr>
    <td bgcolor=$highlightclass>$diff</td>
    <td >aaa</td>
    <td>aaa</td>
  </tr>
  <tr>
    <td>bbb</td>
    <td>bbb</td>
    <td>bbb</td>
  </tr>
  <tr>
    <td>ccc</td>
    <td>ccc</td>
    <td>ccc</td>
  </tr>
</table> ";
        ?>

Άβαταρ μέλους
charavge
Δημοσιεύσεις: 378
Εγγραφή: 14 Σεπ 2006 15:47

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από charavge » 18 Σεπ 2012 16:29

Γιατί δε βάζεις ένα έτοιμο script αντίστροφης μέτρησης από Javascript και να προσαρμόζεις ανάλογα το αποτέλεσμα το css.
Δες μερικά παραδείγματα αντίστροφης μέτρησης εδώ:

http://www.tripwiremagazine.com/2012/05 ... ripts.html
http://www.codingforums.com/showthread.php?t=149460

Αν προλάβω θα σου γράψω όλο τον κώδικα.

zirico3
Δημοσιεύσεις: 23
Εγγραφή: 24 Οκτ 2006 01:47

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από zirico3 » 18 Σεπ 2012 16:40

Καταρχήν σε ευχαριστώ για την πολύ γρηγορη απάντηση σου. Δεν νομίζω ότι η ιδέα του countodown κάνει για την περίπτωση μου. Σκέψου επίσης ότι την μεταβλητή expire θα την παίρνω από ένα database mysql. Εγώ ήθελα πιο πολύ ένα οπτικό εφέ στην ταμπέλα ώστε να πέφτει το μάτι αμέσως αν ένα πιστοποιητικό είναι κοντά στην λήξη του.

Άβαταρ μέλους
charavge
Δημοσιεύσεις: 378
Εγγραφή: 14 Σεπ 2006 15:47

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από charavge » 18 Σεπ 2012 17:17

Φίλε μου δε μίλησες για mySQL και τόση ώρα γράφω τον κώδικα σε JS. Δεν πειράζει, τον παραθέτω και εσύ απλά κάνε τις διορθώσεις σου.
Είναι πολύ απλό!!

Κώδικας: Επιλογή όλων

<html>
<head>
<title>Javascript Different Display - Css</title>

<style>
#mylabel&#123;
	width&#58;280px;
	height&#58;40px;
	font-size&#58;25px;
	padding&#58;20px;
&#125;
</style>

<script>
/*
Count down until any date script-
By JavaScript Kit &#40;www.javascriptkit.com&#41;
Over 200+ free scripts here!
*/


//change the text below to reflect your own,
var montharray=new Array&#40;"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"&#41;

function countdown&#40;yr,m,d&#41;&#123;
	var today=new Date&#40;&#41;
	var todayy=today.getYear&#40;&#41;
	//Παίρνουμε χρονολογία
	if &#40;todayy < 1000&#41;&#123;
		todayy+=1900;
	&#125;
	//Παίρνουμε μήνα
	var todaym=today.getMonth&#40;&#41;
	//Παίρνουμε ημέρα
	var todayd=today.getDate&#40;&#41;
	
	//Όλο μαζί
	var todaystring=montharray&#91;todaym&#93;+" "+todayd+", "+todayy
	
	//Η τελική μας ημερομηνία
	var futurestring=montharray&#91;m-1&#93;+" "+d+", "+yr
	
	//Παίρνουμε τη διαφορά
	var difference=&#40;Math.round&#40;&#40;Date.parse&#40;futurestring&#41;-Date.parse&#40;todaystring&#41;&#41;/&#40;24*60*60*1000&#41;&#41;*1&#41;
	if &#40;difference==0&#41;&#123;
		document.write&#40;'The time is up!'&#41;
	&#125;
	else if &#40;difference>0&#41;&#123;
		document.write&#40;difference+" days left until time up!"&#41;
	&#125;
	
	/* Καλούμε τη function αλλαγής χρώματος του Background.*/
	changeColor&#40;difference&#41;;
&#125;

/*Τώρα χρειάζεσαι να αλλάζεις το display.
/*Εδώ θα αλλάζουμε το css αναλόγως την ημέρα. Έστω ότι έχεις 10 ημέρες μέχρι τη λήξη, θα βάλουμε 10 cases.*/
/* Θα χρησιμοποιήσουμε τη διαφορά που μένει π.χ. 10 μέρες από το προηγούμενο script */

function changeColor&#40;daysdifference&#41;&#123;
	switch &#40;daysdifference&#41;
	&#123;
	case 0&#58;
	  /* Εδώ στην ουσία λες τι θέλεις να κάνεις. Εγώ αλλάζω το χρώμα του φόντου. Εσύ μπορείς να αλλάζεις background photo ή ότι άλλο θέλεις.*/
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#f3f3f3";
	  break;
	case 1&#58;
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#abcabc";
	  break;
	case 2&#58;
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#876542";
	  break;
	case 3&#58;
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#123456";
	  break;
	case 4&#58;
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#111332";
	  break;
	case 5&#58;
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#432534";
	  break;
	case 6&#58;
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#234323";
	  break;
	case 7&#58;
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#ffccdd";
	  break;
	case 8&#58;
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#aaaaaa";
	  break;
	case 9&#58;
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#eeeeee";
	  break;
	 case 10&#58;
	  document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#cdcdfc";
	  break;
	&#125;
&#125;
</script>

</head>

<body>

<div id="mylabel">
	<script>
	//Εδώ ορίζεις την ημερομηνία λήξης. Με τον αμερικάνικο τρόπο, δηλαδή YYYY, MM, DD. Y=Year, M=Month, D=Day.
	countdown&#40;2012,9,28&#41;;
	</script>
</div>

</body>
</html>
Τώρα, εσύ παίρνεις την τιμή σε αυτή τη μορφή (YYYY,MM,DD) από τη βάση. Αυτό μας κάνει στο συγκεκριμένο κώδικα καθότι θα κάνεις απλώς echo την ημερομηνία από τη βάση.

Δηλαδή θα πάρεις την ημερομηνία σε μία μεταβλητή $finaldate και θα γράψεις αντί:

Κώδικας: Επιλογή όλων

<script>
	countdown&#40;2012,9,28&#41;;
</script>
Αυτό:

Κώδικας: Επιλογή όλων

<script>
	countdown&#40;<?php echo $finaldate?>&#41;;
</script>
Ελπίζω να σου κάνει.

Τώρα για την περίπτωση που θες να κάνεις την ημερομηνία έτσι (YYYY,MM,DD) απλά:

Κώδικας: Επιλογή όλων

$finaldate =strtotime&#40;$row&#91;date&#93;&#41;; 
$finaldate = date&#40;'Y,m,d',$finaldate&#41;;

zirico3
Δημοσιεύσεις: 23
Εγγραφή: 24 Οκτ 2006 01:47

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από zirico3 » 19 Σεπ 2012 11:40

Σευχαριστώ παρα πολύ, αν και δεν έχω ιδέα από js θα προσπαθήσω να το δοκιμάσω. δουλεύει άψογα πάντως .το θέμα είναι να καταφέρω να το ενσωματώσω στην ταμπέλα μου. Και κάτι τελευταίο. Πως μπορώ τα case να τα κάνω τρία,δηλαδή κίτρινο χρώμα 90 ημερες πριν την λήξη,πορτοκαλι χρώμα 60 μέρες πριν την λήξη και κόκκινο 30 μέρες πριν την λήξη

WSPNH
Δημοσιεύσεις: 97
Εγγραφή: 10 Μαρ 2006 12:52
Επικοινωνία:

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από WSPNH » 19 Σεπ 2012 14:00

Κώδικας: Επιλογή όλων

<?php 

$today=strtotime&#40;date&#40;'Y-m-d',time&#40;&#41;&#41;&#41;; 
$expire = strtotime&#40;'2012-11-28'&#41;;

//diff σε δευτερόλεπτα.
$diff=$expire-$today;

//Μια μέρα έχει 86400 secs
$daySecs=86400;

//άρα άν το πιστοποιητικό λήγει σε 30 μέρες τότε $daySecs * 30

//αν η διαφορά είναι μικρότερη και ίση των 30 ημερών τότε κάνε το κόκκινο
if &#40;$diff<=$daySecs*30&#41; $highlightclass="red";
//αλλιώς αν η διαφορά είναι μεγαλύτερη από 30 και μικρότερη από 180 μέρες τότε κάνε το κίτρινο
elseif &#40;$diff>$daySecs*30 && $diff<$daySecs*180&#41; $highlightclass="yellow";
//αλλιώς μην χρωματίσεις.
else $$highlightclass="";

echo "<table width='200' border='1' cellspacing='3' cellpadding='3'> 
  <tr> 
    <th scope='col'>1</th> 
    <th scope='col'>2</th> 
    <th scope='col'>3</th> 
  </tr> 
  <tr> 
    <td bgcolor=$highlightclass>$diff</td> 
    <td >aaa</td> 
    <td>aaa</td> 
  </tr> 
  <tr> 
    <td>bbb</td> 
    <td>bbb</td> 
    <td>bbb</td> 
  </tr> 
  <tr> 
    <td>ccc</td> 
    <td>ccc</td> 
    <td>ccc</td> 
  </tr> 
</table>"; 
?>
Αν θέλεις βέβαια να εμφανίζεις και πόσες μέρες έχουν απομείνει πρέπει να μετατρέψεις το $diff (δευτερόλεπτα) σε mins days months e.t.c. και να πάρεις τις μέρες.
Υπάρχουν συναρτήσεις στο ίντερνετ...
http://xesemesa.gr ή http://arxwn.eu όπως και να έχει http://jbaron.gr

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από jpk » 19 Σεπ 2012 14:44

Η PHP έχει την DateTime κλάση που κάνει αυτό που λέει το όνομά της http://php.net/manual/en/class.datetime.php

zirico3
Δημοσιεύσεις: 23
Εγγραφή: 24 Οκτ 2006 01:47

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από zirico3 » 19 Σεπ 2012 16:43

jpk έγραψε:Η PHP έχει την DateTime κλάση που κάνει αυτό που λέει το όνομά της http://php.net/manual/en/class.datetime.php
Συγγνώμη επειδή είμαι και πολύ αρχάριος με την datetime αλλάζω την μεταβλητή από δευτερόλεπτα σε ημερες κλπ?

Άβαταρ μέλους
charavge
Δημοσιεύσεις: 378
Εγγραφή: 14 Σεπ 2006 15:47

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από charavge » 21 Σεπ 2012 13:03

zirico3 έγραψε:Σευχαριστώ παρα πολύ, αν και δεν έχω ιδέα από js θα προσπαθήσω να το δοκιμάσω. δουλεύει άψογα πάντως .το θέμα είναι να καταφέρω να το ενσωματώσω στην ταμπέλα μου. Και κάτι τελευταίο. Πως μπορώ τα case να τα κάνω τρία,δηλαδή κίτρινο χρώμα 90 ημερες πριν την λήξη,πορτοκαλι χρώμα 60 μέρες πριν την λήξη και κόκκινο 30 μέρες πριν την λήξη
Πρέπει να ψάξεις όμως κι εσύ λίγο μόνος σου, δε νομίζεις; Μέσα στον κώδικα σου έχω γράψει σχόλια. Τα σχόλια ξεκινάνε με /* και κλείνουν με */, ή εναλλακτικά με //. Αν δεις τα σχόλια στον κώδικα, θα καταλάβεις νομίζω εύκολα.
Τα cases πάνε σύμφωνα με μία μεταβλητή, που στην προκειμένη περίπτωση είναι οι ημέρες που απομείνανε. Ορίζεις δηλαδή την περίπτωση που η μεταβλητή σου πάρει μία συγκεκριμένη τιμή (εγώ έβαλα 1-10). Άρα, για κάθε case ορίζεις την ημέρα στην οποία θέλεις να αναφέρεσαι.

Εγώ ήθελα στο παράδειγμα μου να αναφερθώ για τις 10 τελευταίες ημέρες κι έτσι έφτιαξα 10 cases με τους αριθμούς των ημερών που ήθελα. Αντίστοιχα, μπορείς κι εσύ αντί για 10 cases να φτιάξεις 3 μόνο και σαν περιπτώσεις (cases) να ορίσεις τις τιμές που θέλεις, δηλαδή 30,60 και 90. Αντίστοιχα θα βάλεις και τις ενέργειες που θέλεις να γίνονται:

Κώδικας: Επιλογή όλων

switch &#40;daysdifference&#41; 
   &#123; 
   case 30&#58; 
     document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="red"; 
     break; 
   case 60&#58; 
     document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="orange"; 
     break; 
   case 90&#58; 
     document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="yellow"; 
     break; 
&#125;
Μη σε φοβίζει η JavaScript. Κι εγώ δεν είμαι expert. Είναι πολύ απλή στο συγκεκριμένο παράδειγμα. Περιέχει μόνο το switch (case) που ούτως ή άλλως πρέπει να ξέρεις σαν προγραμματιστής (έστω σαν ιδέα) και το document.getElementById(object).style.backgroundColor, που είναι μία εντολή της javascript για τη συγκεκριμένη δουλειά.

Έχεις πάρει την απάντησή σου ούτως ή άλλως και σε PHP από το φίλο πιο πάνω, επομένως νομίζω είσαι καλυμμένος.

zirico3
Δημοσιεύσεις: 23
Εγγραφή: 24 Οκτ 2006 01:47

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από zirico3 » 21 Σεπ 2012 16:25

Ναι η απάντηση έχει καλυψθεί πλήρως,μπορεί να γίνει SOLVED το θέμα. Όμως όσο αφορά την js,αυτό μου μου έγραψες ήταν αυτό που έκανα αμέσως,δηλαδή να γράψω case 30 60 90 ,αλλα έτσι το case λειτουργεί μονο στην τριαντακοστη μέρα ενώ στην 29 όχι...ένας τρόπος που σκέφτηκα αλλα σου βγαίνει λίγο το χέρι να γράψεις είναι αυτός...

Κώδικας: Επιλογή όλων

case 1&#58; case 2&#58;case 3&#58;case 4&#58;case 5&#58;case 6&#58;case 7&#58;case 8&#58;case 9&#58;case 10&#58;case 11&#58;case 12&#58;case 13&#58;case 14&#58;case 15&#58;case 16&#58;case 17&#58;case 18&#58;case 19&#58;case 20&#58;case 21&#58;case 22&#58;case 23&#58;case 24&#58;
     document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#CC0000";
     break;
σε ευχαριστώ και πάλι για τον χρόνο σου.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από dva_dev » 21 Σεπ 2012 16:33

Ισως μπορείς να σώσεις το χέρι σου με κάτι τέτοιο:

Κώδικας: Επιλογή όλων

days30diff = 1+Math.floor&#40;&#40;daysdifference-1&#41;/30&#41;
switch &#40;days30diff&#41;
&#123;
case 1&#58; //Μέρες 1-30
...
case 2&#58;//Μέρες 31-60
...
case 3&#58;//Μέρες 61-90
...
&#125;
Τώρα αν τα διαστήματα δεν είναι όλα των 30 ημερών θα το έκανα ως εξής

Κώδικας: Επιλογή όλων

if &#40;daysdifference > 90&#41; &#123; //Μέρες 91+
...
&#125;
else if &#40;daysdifference > 64&#41; &#123; //Μέρες 65-90
....
&#125;
else if &#40;daysdifference > 47&#41; &#123; //Μέρες 48-64
...
&#125;
else if &#40;daysdifference > 20&#41; &#123; //Μέρες 21-47
...
&#125;
else if &#40;daysdifference > 0&#41; &#123; //Μέρες 1-20
...
&#125;
else &#123; //0 μέρες
...
&#125;
Tα 90,64,47,20 είναι απλώς ενδεικτικά για να τονίσω την ανομοιομορφία των διαστημάτων. Φυσικά παίζει και στην περίπτωση που έχεις 90, 60, 30 ημέρες.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από gvre » 21 Σεπ 2012 17:49

zirico3 έγραψε:Ναι η απάντηση έχει καλυψθεί πλήρως,μπορεί να γίνει SOLVED το θέμα. Όμως όσο αφορά την js,αυτό μου μου έγραψες ήταν αυτό που έκανα αμέσως,δηλαδή να γράψω case 30 60 90 ,αλλα έτσι το case λειτουργεί μονο στην τριαντακοστη μέρα ενώ στην 29 όχι...ένας τρόπος που σκέφτηκα αλλα σου βγαίνει λίγο το χέρι να γράψεις είναι αυτός...

Κώδικας: Επιλογή όλων

case 1&#58; case 2&#58;case 3&#58;case 4&#58;case 5&#58;case 6&#58;case 7&#58;case 8&#58;case 9&#58;case 10&#58;case 11&#58;case 12&#58;case 13&#58;case 14&#58;case 15&#58;case 16&#58;case 17&#58;case 18&#58;case 19&#58;case 20&#58;case 21&#58;case 22&#58;case 23&#58;case 24&#58;
     document.getElementById&#40;"mylabel"&#41;.style.backgroundColor="#CC0000";
     break;
1. Δε χρειάζεσαι javascript. Κάνε το όπως σου είπε ο jpk.
2. Αντί case μπορείς να χρησιμοποιήσεις 3 if.

Άβαταρ μέλους
charavge
Δημοσιεύσεις: 378
Εγγραφή: 14 Σεπ 2006 15:47

Διαφορα ημερομηνίας σε ημερες

Δημοσίευση από charavge » 23 Σεπ 2012 05:10

gvre έγραψε:2. Αντί case μπορείς να χρησιμοποιήσεις 3 if.
Σωστά! Εγώ επικεντρώθηκα αλλού και κατάλαβα κάτι άλλο.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες