bbeer Posted October 6, 2016 Share Posted October 6, 2016 Hi all I almost bang my head against the desk, trying to separate date and time in the the output. I would love to use only one DateTime field for a little Event list. I used this code $content .= "<p>Datum: {$event->zeit()}"; $content .= "<br />Zeit: {$event->zeit}"; I tried to out put the date only by $content .= "<p>Datum: {$event->zeit("d-m-Y")}"; but I get errors. Is there a way to output time and date separate or do I have to use two fields? Link to comment Share on other sites More sharing options...
diogo Posted October 6, 2016 Share Posted October 6, 2016 Hey Beat, no need to bang your head If you didn't change the output in the field settings, you should be getting a timestamp (1475743564). You can just break it down into date and time like this: echo "<p>Datum: " . strftime( '%d/%m/%Y', $event->zeit ); echo "<br />Zeit: " . strftime( '%H:%M:%S', $event->zeit ); The strings that I'm passing to the function are time representations from this list: http://php.net/manual/en/function.strftime.php You can do something more elaborate like this: strftime( '%A, %e of %B of the year %Y', $event->zeit ); which would output "Thursday, 6 of October of the year 2016" In that case, you would probably want to output them in German, so you have to set the locale if the system isn't already: setlocale(LC_ALL, "de_CH", "de_CH.utf-8", german") strftime( '%A, %e of %B of the year %Y', $event->zeit ); 1 Link to comment Share on other sites More sharing options...
LostKobrakai Posted October 6, 2016 Share Posted October 6, 2016 May I ask, where you got this code? $event->zeit is neither a function, nor a object you could call methods on. It's either a timestamp (integer) or a formatted string. I'm using this hook in my ready.php to have something a bit like you wanted to use: $wire->addHook("Page::getDate", function(HookEvent $event){ $page = $event->object; $fieldName = $event->arguments(0); $dateFormat = $event->arguments(1); $empty = $event->arguments(2) ?: ''; $field = $page->fields->get($fieldName); if(($field instanceof Field && $field->type == "FieldtypeDatetime") || $fieldName == "created" || $fieldName == "modified"){ $function = strpos($dateFormat, "%") !== false ? 'strftime' : 'date'; $raw = $page->getUnformatted($fieldName); return $event->return = $raw ? $function($dateFormat, $raw) : $empty; } }); It allows you to use this on datetime fields, no matter of the field settings: // date() syntax // => 04.02.2016 $page->getDate('zeit', 'd.m.Y'); // strftime syntax // => 4 Februar 2016 $page->getDate('zeit', '%e %B %Y'); // empty field value // => Nicht terminiert. $page->getDate('empty_zeit', '%e %B %Y', 'Nicht terminiert.'); // invalid field // => null $page->getDate('ziet', 'd.m.Y'); 3 Link to comment Share on other sites More sharing options...
bbeer Posted October 6, 2016 Author Share Posted October 6, 2016 Hi Diogo , Lost Koprakai, thanks Diogo, your solutions works, as usual. @Lost Koprakai this is my original code. $events = $page->events; foreach($events as $event){ $programm = $event->file ? "<br /><a href='{$event->file->url}' title='{$event->file->name}' target='_blank'>{$event->file->description} herunterladen</a>" : ""; $content .= "<div class='event'>"; $content .= "<h2>{$event->firstname}</h2>"; $content .= "<p>Datum:"{$event->zeit()}"; $content .= "<br />Zeit: {$event->zeit}"; $content .= "<br />Ort: {$event->sirname}"; $content .= "<br />{$event->summary}"; $content .= $programm; $content .= "</p></div>"; } I will look into your proposal as well. Thanks a lot. Link to comment Share on other sites More sharing options...
diogo Posted October 6, 2016 Share Posted October 6, 2016 (edited) Just a small correction on your code. In this case it doesn't apply, because $event->zeit() is not an actual function, but in the case that it was, you could never call it inside the curly braces, because with that method of echoing strings the functions are not processed. In that case you would want to do: $content .= "<p>Datum:" . $event->zeit(); Edited October 6, 2016 by diogo wrong! see LostKobrakai post below Link to comment Share on other sites More sharing options...
LostKobrakai Posted October 6, 2016 Share Posted October 6, 2016 @diogo That's not true, it won't work without curly braces, but it does with them. class Greeter{ public function greet() { return 'Hi!'; } } $greeter = new Greeter; echo "Trigger greeter: {$greeter->greet()}"; // Trigger greeter: Hi! @bbeer If you're not sure what you can do with a field, just var_dump($page->field) and it'll tell you what type the field does return. Only objects can give you the possibility to further customize the output via $page->field() or $page->field->someMethod(). A Datetime field will only return an integer or string. Link to comment Share on other sites More sharing options...
diogo Posted October 6, 2016 Share Posted October 6, 2016 @LostKobrakai Oh, you're right, of course. Stroked! It doesn't work only when you call a function directly: function greet() { return 'Hi!'; } echo "Trigger greeter: {greet()}"; // Trigger greeter: {greet()} 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now