This really isn't a problem.
Within PHP, you're working with GMT any time you call the time() function, regardless of the time zone of your server. If you do this:
$now = time();
... you get the number of seconds since Jan 1 1970 GMT. Construct your expiration time by adding to that.
If you need to explicitly set an expiration calendar date/time, use gmmktime().
The PHP set_cookie() function properly formats the timestamp as a string, again based on GMT.
It is the responsibility of the browser to know its own time zone and to do any necessary math to figure out when to expire the cookie.
If you have users for which this code is not working, then it is likely that their system clocks are not set properly, or their system is not properly configured for their time zones.
Judging from the number of stupid timestamps I see in my email inbox, that's actually a fairly common problem. But it's the user's problem to fix. Nothing you can do about it.