php-rrule
php-rrule copied to clipboard
Support for floating/local time
Hi,
According to the RFC 5545 DTSTART can also be defined in local (floating) time. This means that no timezone information will be appended to the DTSTART field. When I assign a datetime to DTSTART (in format 2019-08-20 17:00:00) the UTC timezone will still be appended (by 'Z'). Does this package support floating times for DTSTART?
Regards, Chris
Does this package support floating times for DTSTART?
Hi @chris-rs,
Yes! More info:
- creation: https://github.com/rlanvin/php-rrule/wiki/RRule#creation-from-a-string
- export to a RFC String: https://github.com/rlanvin/php-rrule/wiki/RRule#rfcstringinclude_timezone--true
Feel free to close the ticket if that answered your question, or provide more details if something is not working for you.
Thanks @rlanvin for the fast and helpful response! Is there a way to put the local datetime in the rrule without requiring the false argument (rfcString(false))? I just tried:
$rule = new \RRule\RRule([
'FREQ' => 'WEEKLY',
'BYDAY' => ['MO','TU','WE','TH','FR','SA','SU'],
'DTSTART' => Carbon::today()->setTime(10,0,0)->toDateTimeLocalString()
]);
But RRule still assigns Zulu timezone to DTSTART when I do $rule->rfcString()
Well no, the lib needs a timezone to perform the calculations. Besides, the results are returned as DateTime objects, which contain a timezone as well. There is no way to NOT have a timezone internally. So if you don't provide one, the current PHP default timezone will be used (in your case, your PHP is configured with UTC I guess).
What is the problem exactly with rfcString(false)?
@rlanvin events can be floating or bound to a timezone. So I should decide about the argument per event. The rfcString() is called just before the response is sent. I want to avoid putting logical rules at this place and keep this place solely responsible for generating output.
So if I understand your problem correctly, essentially you want to keep track of whether or not a particular instance was created with a "floating time" in order for rfcString() to behave differently when no argument is passed?
Yes, keeping track of floating times could be part of the RRule object since DTSTART is in a format with or without timezone info. For now I solved it by keeping track of floating times in own Event object (which contains RRule).
I would have done the same, it's a good workaround. Leaving this ticket open, I'll see if I can add something in the lib itself.