Timesheets are the bane of all software developers and consultants. Nobody does them on time, and I for one have difficulty remembering what I did during the week. I know I could simply fill in the timesheet each day, but heck, I am lazy. Over a few years, I've been writing and rewriting scripts to keep a timesheet in a CSV file, so that I can query it at the end of the week to see what I have been up to. The first version of this script was done in python and was actually implemented by a friend of mine a few companies ago. Since then, I've used the same idea to try out new programming languages, as "Hello World" is really stupid.
The current version of my timesheet "system" is in Ruby and consists of 2 scripts. Both scripts require the Chronic gem for natural language date/time parsing. The first script time_entry is used to enter timesheet information, and the second script time_report is used to search the timesheet.
Being lazy, I usually create aliases, one called 'tt' for time_entry and one called 'tl' for time_report. That way I can simply type
tt wibble middleware integrationto create an entry for the wibble project (at the current date and time) and type
tl -s "monday last week" -e "friday last week"to get a summarised list of entries for last week.