Just nu i M3-nätverket
Gå till innehåll

Lägga in datum i tabell från PHP - formatfel


Locutus

Rekommendera Poster

Hej

Jag försöker göra en PHP-sida som lägger in värden från en .vcs eller .ics kalenderfil i en databastabell. Jag har fått ut värdena jag behöver via php-script. DTSTART är i formatet 20171201T162000Z

Problemet jag har, är att få in det i MySQL databastabellen, jag har provat både att ha fältet som DATETIME och TIMESTAMP,

men får 0000-00-00 00:00:00 som värde i fältet. Jag behöver ha fältet som datum-tid fält, då jag måste sortera och ta ut värden mellan vissa datum.

Jag antar att jag måste konvertera textsträngen i PHP innan jag lägger in i databasfältet, men har inte lyckats få det att fungera.

 

Tacksam för hjälp hur jag ska göra, så jag kan lagra $DTSTART och behålla både datum och tid, för att sedan ta ut det ur tabellen igen och göra om till originalformatet.

<?php
session_start();
$sid = session_id();
?>

<?php
include ( 'icalEasyReader.php' );
$ical = new iCalEasyReader();
$lines = $ical->load( file_get_contents( 'Schema December 2017.vcs' ) );

//open Databas
	mysql_connect("************", "*************", "********");
	mysql_select_db("*********");	

foreach($lines as $ver) 
{
	foreach($ver as $event)
	{
	$DTSTART= $event['DTSTART']; //Denna rad ger: 20171201T162000Z	
	$DTEND = $event['DTEND'];
	$SUMMARY = $event['SUMMARY'];

	// Lägg in värden i tabellen
	mysql_query("INSERT INTO db_kalender VALUES ('','" . $sid . "','" . $DTSTART . "','" . $DTEND . "','" . $SUMMARY . "','','')");

	}
}
Länk till kommentar
Dela på andra webbplatser

Jag tror du får en ledtråd ifrån vad som faktiskt hamnar i databasen. Prova skicka in datum i det formatet, 2017-12-01 16:20:00.

 

Du borde kunna använda funktonen date_parse_from_format för att få fram formatet från din ics-fil tycker jag.

Länk till kommentar
Dela på andra webbplatser

Tack för svaret, jag nämnde nog inte att jag är väldigt ringrostig i både PHP och mySQL.

Den funktionen du föreslår ger en array.

Finns det ingen funktion eller enkelt sätt att omvandla datum-tid i en string till olika format? "20171201T162000Z" är vad jag förstått i format UTC, stämmer det?

Länk till kommentar
Dela på andra webbplatser

Välkommen till programmering och datumformatens förlovade värld. I Sverige så skriver vi gärna datum enligt formatet år-månad-dag med bindestreck där emellan, fyra siffror får år. Förutom på mjölkpaketen, där skriver vi månad dag år, utan bindestreck och mellanslag. Jag tror det är den ordningen, jag är ärligt talat inte helt hundra.

 

I EU vill man ha snedstreck och bara två siffror för år. Samt att året kommer sist. I USA skriver man helst månad, dag, år.

 

Faktum är att nästan alla länder skriver datum och tid olika. Är det fyra siffror för år, ska månad ha inledande nolla eller ej. Faktum är att det finns antagligen hundratals olika format att skriva datum på. Så när du frågar om det finns en funktion eller enkelt sätt att omvandla datum-tid i en string till olika format så är svaret antagligen nej. För du vet inte vilket format datum och tid är skrivet i. Men det finns en funktion. I php så heter den date_parse_from_format, du specificerar hur datum och tid är skrivet och du får tillbaka en array med det olika komponenterna som år, månad, dag osv. Och dessa kan du använda för att formatera en sträng enligt det format du vill ha.

 

Nu är jag inte heller speciellt vass på php, men om du gräver lite i dokumentationen så kommer du hitta objektet DateTime, det kan säkert hjälpa dig.

 

Prova även det här och se om det hjälper

<?php

$date = DateTime::createFromFormat("Ymd\THise", "20171201T162000Z");

// print_r($date)
print_r(date_format($date, "Y-m-d H:i:s"));

?>
Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...