jscript: Added Date_toTimeString implementation.

This commit is contained in:
Piotr Caban 2009-06-28 23:39:32 +02:00 committed by Alexandre Julliard
parent 0e379fbe05
commit 40b88e261a
1 changed files with 59 additions and 2 deletions

View File

@ -507,11 +507,68 @@ static HRESULT Date_toDateString(DispatchEx *dispex, LCID lcid, WORD flags, DISP
return E_NOTIMPL;
}
/* ECMA-262 3rd Edition 15.9.5.4 */
static HRESULT Date_toTimeString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
{
FIXME("\n");
return E_NOTIMPL;
static const WCHAR NaNW[] = { 'N','a','N',0 };
static const WCHAR formatW[] = { '%','0','2','d',':','%','0','2','d',':','%','0','2','d',
' ','U','T','C','%','c','%','0','2','d','%','0','2','d',0 };
static const WCHAR formatUTCW[] = { '%','0','2','d',':','%','0','2','d',
':','%','0','2','d',' ','U','T','C',0 };
DateInstance *date;
BSTR date_str;
DOUBLE time;
WCHAR sign;
int offset;
TRACE("\n");
if(!is_class(dispex, JSCLASS_DATE)) {
FIXME("throw TypeError\n");
return E_FAIL;
}
date = (DateInstance*)dispex;
if(isnan(date->time)) {
if(retv) {
V_VT(retv) = VT_BSTR;
V_BSTR(retv) = SysAllocString(NaNW);
if(!V_BSTR(retv))
return E_OUTOFMEMORY;
}
return S_OK;
}
time = local_time(date->time, date);
if(retv) {
date_str = SysAllocStringLen(NULL, 17);
if(!date_str)
return E_OUTOFMEMORY;
offset = date->bias +
daylight_saving_ta(time, date);
if(offset < 0) {
sign = '+';
offset = -offset;
}
else sign = '-';
if(offset)
sprintfW(date_str, formatW, (int)hour_from_time(time),
(int)min_from_time(time), (int)sec_from_time(time),
sign, offset/60, offset%60);
else
sprintfW(date_str, formatUTCW, (int)hour_from_time(time),
(int)min_from_time(time), (int)sec_from_time(time));
V_VT(retv) = VT_BSTR;
V_BSTR(retv) = date_str;
}
return S_OK;
}
/* ECMA-262 3rd Edition 15.9.5.6 */