Just chucking my 2 pence, (or 5 cents if you are a yank) into the pot.
The iPhone 4s I got had atrocious battery life but what I noticed was that the Settings, Location Services, System Services, Setting Time Zone was constantly accessing my location, and therefore constantly pinging GPS. I have since turned that off, along with Diagnostics & Usage and Location-Based iAds, and also turned off Settings, General, About, Diagnostics & Usage.
I ran the phone down till it turned itself off, then gave it a full charge over night and now battery life seems fine.
Under Settings, Location Services, System Services turn on Status Bar Icon so you can check if something is constantly accessing the GPS.
Remember, as with any smart phone, running any O/S, you are never going to get more than a working day out of it, if you use it with any kind of zeal, before you have to charge it.
This is purely anecdotal, but it has worked for me