μετατροπη ημερομηνιας για εισαγωγη στην βαση

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

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

Απάντηση
Άβαταρ μέλους
alex_begos
Δημοσιεύσεις: 102
Εγγραφή: 07 Σεπ 2007 19:29

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από alex_begos » 28 Οκτ 2010 18:23

διαβαζω απο ενα csv file ημερομηνίες της μορφής 15/10/77 και θέλω να
τις μετατρέπω στην μορφή 1977-10-15

εχω τιν παρακάτω function η οπόια δουλευει αλλα οχι για ολες τις ημερομηνίες

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

	function date2mysql($date) {
 	      $new = explode("/",$date);
          $a=array ($new[2], $new[1], $new[0]);
		  $n_date=implode("-", $a);
		  
          return $nndate=date('Y-m-d', strtotime($n_date));
για παραδειγμα κανει το παρακάτω λαθος στην μετατροπη:
05/05/37->2037-05-05

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από Apostolis_38 » 28 Οκτ 2010 21:11

Υποθέτω πως το 37 είναι το 1937.
Αν θυμάμαι καλά η date (όπως και η timestamp) "ξεκινάνε" από το 1970.
Για δήλωσε κανονικά το 1937 να δεις τι θα κάνει.

Άβαταρ μέλους
Nemesis_Elite
Δημοσιεύσεις: 348
Εγγραφή: 14 Μαρ 2009 22:51
Τοποθεσία: athens

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από Nemesis_Elite » 28 Οκτ 2010 21:21

μήπως θα έπρεπε να μπεί YY Ή YYYY MM DD ?
χωρις να ξέρω πολλά...

Άβαταρ μέλους
alex_begos
Δημοσιεύσεις: 102
Εγγραφή: 07 Σεπ 2007 19:29

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από alex_begos » 29 Οκτ 2010 12:07

Να ρωτησω κατι αλλο παιδια αν δηλώσω το πεδιο οχι σαν date αλλα VARCHAR ή TEXT ΜΠΟΡΩ ΜΕΤΑ ΝΑ ΚΑΝΩ ΑΝΑΖΗΤΗΣΗ ΜΕ ΒΑΣΗ ΤΗΝ ΗΜΕΡΩΜΗΝΙΑ?

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από Apostolis_38 » 29 Οκτ 2010 12:22

Απλή αναζήτηση μπορείς να κάνεις.

Θα έχεις αλλού προβλήματα όμως, π.χ. αν προσπαθείς να βρείς την μικρότερη από τις ημερομηνίες που έχεις καταχωρημένες. Η να βρείς καποια ενδιάμεση ημερομηνία (μεγαλύτερη από 10/10/2010 και μικρότερη από 29/10/2010) κ.λ.π.
Σε τέτοιες περιπτώσεις η mysql δεν γυρνάει σωστά αποτελέσματα.
Θα πρέπει εσύ να κάνεις explode, να συγκρίνεις τα δεδομένα, να πιάσεις ΟΛΕΣ τις πιθανές εκδοχές και τρέχα γύρευε.
Η δυνατότητα τις mysql να συγκρίνει ημερομηνίες αχρηστεύεται.

Άβαταρ μέλους
alex_begos
Δημοσιεύσεις: 102
Εγγραφή: 07 Σεπ 2007 19:29

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από alex_begos » 29 Οκτ 2010 14:54

αυτο το φανταζόμουν απλα ηθελα να το ξανακουσω :D
πως μπορω λοιπών να μετατρέπω σωστά την ημερωμηνία στην συγκεκριμένη περίπτωση...

δηλαδή αν εχω ημερωμινία πριν 1970 τι κανώ πα θα τιν μετατρέπω σωστά

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από Apostolis_38 » 29 Οκτ 2010 15:15

Δεν έχει χρειαστεί να ασχοληθώ για να σου πω την αλήθεια, ώστε να σου δώσω κάποιο συγκεκριμένο παράδειγμα.
Φαντάζομαι οτι μπορείς να βάλεις κάποιο if($new[2] <= έτος) αλλά είναι λίγο ριψοκίνδυνο αυτό.
Αν φτιάχνεις script το οποίο θα τρέχει χρόνια τότε πολύ πιθανό να έχεις άλλα προβλήματα.
Δηλαδή το 11 μπορεί να σημαίνει είτε 1911 είτε 2011. Οπότε βάζοντας κάποιο if($new[2] <= 11) θα έχεις πρόβλημα.

Πιστεύω πως το καλύτερο που έχεις να κάνεις είναι να δηλώνεις ρητά το έτος στο csv.



Ισως κάποιος άλλος έχει καμμιά καλύτερη ιδέα ή ξέρει κάτι παραπάνω.

Άβαταρ μέλους
alex_begos
Δημοσιεύσεις: 102
Εγγραφή: 07 Σεπ 2007 19:29

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από alex_begos » 29 Οκτ 2010 15:33

Φιλε Αpostoli ακριβως αυτο σκέφτικα και εγω πως μπορώ να κάνω... νομιζω πως η καλύτερη ιδέα είναι να εχω στο σωστο format απο το csv... απλα το κακό με την συγκεκριμενη περιπτωση ειναι οτι τα csv αρχεία δεν κρατάνε το format ετσι δεν ειναι η κανω λάθος?

Σ' ευχαριστώ πολυ για το χρόνο σου

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από Apostolis_38 » 29 Οκτ 2010 15:47

Σε μένα είχε τύχει το εξής κουφό.

Τροποποιούσα κανονικά το date σε Αμερικάνικο format (yyyy/mm/dd) και το αποθήκευα.
Μόλις ξανάνοιγα το csv μου το "γύρναγε" στην Ελληνική μορφή (dd/mm/yyyy).
Πιθανώς να έχει να κάνει με τις ρυθμίσεις του συστήματος. "locale" για Linux, κωδικοσελίδα για Windows.
Αν το αποθήκευα σε txt το κράταγε μια χαρά στο σωστό format.

Δεν ξέρω μήπως έκανα εγώ κάτι λάθος αλλά δεν το έψαξα παραπάνω μιας και εγώ έκανα τη δουλειά μου και με txt.

Βασικά εγώ έκανα import στη βάση, οπότε αν θέλεις να κάνεις κι εσύ το ίδιο εδώ δημιουργείται άλλο προβλήμα :evil: μιας και για να περάσει το import πρέπει να γίνει με root δικαιώματα στην mysql.
Πράγμα που δεν με πολυαπασχολούσε μιας και επρόκειτο για τοπική εφαρμογή.

Πάντως όπως σου είπα πιθανώς να υπάρχει κι άλλη λύση.
Ψάξτο λίγο παραπάνω ή περίμενε μήπως κάποιος άλλος προτείνει κάτι καλύτερο.

Άβαταρ μέλους
alex_begos
Δημοσιεύσεις: 102
Εγγραφή: 07 Σεπ 2007 19:29

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από alex_begos » 29 Οκτ 2010 20:27

Για μία φορα μόνο κραταει το format αν το κλεισεις καi το ανοιξεις πάλι τo χανει...
Θα ψαξω βα βρώ μηπως μπορω να αλλάξω στα csv αρχεία το προεπιλεγμένο format... για της ημερομηνίες. αν μπορει να βοηθήσει καποιος

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από Banavas » 30 Οκτ 2010 12:03

Μπορείς να μας πεις ποια είναι η περιοχή ημερομηνιών (δηλαδή χρονολογίες από - έως) που είναι πιθανό να περιέχονται στο CSV;
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
alex_begos
Δημοσιεύσεις: 102
Εγγραφή: 07 Σεπ 2007 19:29

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από alex_begos » 02 Νοέμ 2010 12:37

οι πιθανές ημερομηνίες είναι... απο το 1920 για εως το 2020 για παράδειγμα

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από fafos » 02 Νοέμ 2010 15:41

alex_begos έγραψε:οι πιθανές ημερομηνίες είναι... απο το 1920 για εως το 2020 για παράδειγμα
an to etos den einai tetrapshfios den mporeis na lyseis to provlhma.. ektos ean exeis kapoio allo pedio to csv pou na dhlonei se poion aiona anaferetai to dhpsifio etos (p.x. hlikia shmera)
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

μετατροπη ημερομηνιας για εισαγωγη στην βαση

Δημοσίευση από Banavas » 03 Νοέμ 2010 10:22

Εφόσον οι ημερομηνίες βρίσκονται στην περιοχή που ανέφερες μπορείς να ελέγχεις αν ο διψήφιος αριθμός είναι μεγαλύτερος του 20 και να τον συμπληρώνεις μέ το 19 μπροστά και αν είναι μικρότερος του 20 με το 20 μπροστά.

Μπακαλική βέβαια αλλά από το τίποτα....
Happy coding....
Μάρκος
http://lasernet.gr

Απάντηση

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

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

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