After clarifying a few things with you and hoping I understand the kind of thing you're after, I can't see how you'd do this without going through one of two ways (although someone might well be a tad more innovative than myself):
Visalforce Page and Apex
I'll get this one out of the way first because I know you say that...
Without using a visualforce page is there a way to set the value of a
field as the form opens.
... But it's still worth considering. You're probably already aware that you could capture the current date/time when the form opens. Something like this in your controller (be sure to test this first if you were to use it, I haven't tested it myself) should do the job:
public DateTime theDate {
get {
return System.now();
};
set;
}
You could then pass this value into a DateTime field in Salesforce and compare that with, say, the CreatedDate of the form to get the difference. Theoretically, this value should be earlier than the CreatedDate value.
The only reason I still suggest this is that personally I would say this would be the cleanest and probably easiest way of doing it.
JavaScript Button
This way that wouldn't involve you needing the use of a VF page would be to use a Controller. The JS button might look something like this:
{!REQUIRESCRIPT("/soap/ajax/15.0/connection.js")}
{!REQUIRESCRIPT("/soap/ajax/15.0/apex.js")}
sforce.apex.execute('MyClass','MyMethod');
window.location.reload();
And the controller might look something like this:
global class MyClass {
public static void MyMethod() {
doMyMethod();
}
private static void doMyMethod() {
// Do something
}
}
In that controller you could look to creating the record, redirect the user to the created record and then when it's submitted, capture that DateTime when it was submitted, a formula field might do this in the Page Layout itself. The CreatedDate in this instance would be earlier than the DateTime submitted and you could get the difference this way.
This could get messy though if Users go to create a record, only to leave it and not come back to it. In which case you'd probably want to write a Trigger that would delete certain records if they're missing key pieces of information.
Apologies if I've completely misread what you're after but hopefully this will give you some ideas as to how to do this.