How can I ge user's location (maybe by IP?) and dynamcally set date_default_timezone_set to that area?
google for "geolocation".
If your application stores dates of any sort in your database you shouldn't do this, it will make handling the dates more complicated. Your PHP script should always run with the same timezone, and your database should always store dates in that same timezone; otherwise querying by date becomes a massive and slow nightmare. It doesn't matter what timezone you use, but UTC is the defacto choice.
There are ways of gathering information about the visitor's location / timezone which could be used to automatically change the timezone used to display dates. However, you should still give users the option to manually set a timezone; first because they might not currently be in the timezone they want to see (ex: if they are traveling) and second because no method of determining the user's location or timezone automatically is 100% accurate.