I would have to agree with
kirillm for the most part. When a script runs on the command line but fails in crontab, it's usually an
environment variable issue. The cron environment is very limited and it does not inherit the settings from your login shell, unless you take a lot of care and trouble to make it happen.
The posters above have given suggestions to get your script to give up error messages and place them into files to be read. What I'll add is that you can get your environment variables, if you're in bash/ksh, with the command:
set
and that you probably should, while you're debugging your script, add something like:
print `set`;
into your script, just to see what the cron environment is (assuming you've redirected your script output to a file as others have suggested).
Finally, one style suggestion. It is much easier to do date manipulations with a module such as
Date::Calc or
Date::Manip than manually.