The function time() gives you the time in seconds since 1969. This is independent of time zone, hence won't change wherever you or your server is.
Things like date(), gets the date based on the current time zone. This can be set by the TZ environment variable. I recommend that you do this.
In the PHP docs there is a list of time zones. Typically it's something like "America/New York". So if you do putenv("TZ=America/New York"); at the top of your script, this will affect the behaviour of date() etc.
You should be entirely clear about what time zone all your date columns in the database are. Calling current_timestamp() in MySQL will get the time in the MySQL server's current time zone - which is probably not what you want. Get the time in PHP isntead and insert that value.
It may be advantageous to store all dates / times in GMT and convert them as necessary; however, this doesn't work well with future event dates/time, because people generally schedule events in their local time zone, which may use daylight saving time.
If you store everything in GMT, you have the advantage that you know exactly when something happened (even if it happened during the "witching hour", because GMT, or more properly, UTC, does not have daylight saving time). But the disadvantage is, it's difficult to calculate when an event should be, because it may be in a different time zone from the current due to DST.
So normally, I'd store everything in GMT, except for the date/time of future events, which should be stored in the local time zone of the event instead, because that's what people expect, and will use.
Mark