Changeset 12198
- Timestamp:
- 01/29/08 11:20:29 (12 months ago)
- Files:
-
- 1 modified
-
dojo/trunk/date/locale.js (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
dojo/trunk/date/locale.js
r12188 r12198 292 292 293 293 var widthList = ['abbr', 'wide', 'narrow']; 294 //1972 is a leap year. We want to avoid Feb 29 rolling over into Mar 1, 295 //in the cases where the year is parsed after the month and day. 296 var result = new Date(1972, 0); 294 var result = [1970,0,1,0,0,0,0]; // will get converted to a Date at the end 297 295 var expected = {}; 298 296 var amPm = ""; … … 305 303 if(l != 2 && options.strict){ 306 304 //interpret year literally, so '5' would be 5 A.D. 307 result .setFullYear(v);305 result[0] = v; 308 306 expected.year = v; 309 307 }else{ … … 314 312 var year = '' + new Date().getFullYear(); 315 313 var century = year.substring(0, 2) * 100; 316 var yearPart = Number(year.substring(2, 4)); 317 var cutoff = Math.min(yearPart + 20, 99); 314 var cutoff = Math.min(Number(year.substring(2, 4)) + 20, 99); 318 315 var num = (v < cutoff) ? century + v : century - 100 + v; 319 result .setFullYear(num);316 result[0] = num; 320 317 expected.year = num; 321 318 }else{ … … 326 323 //interpret literally, so '150' would be 150 A.D. 327 324 //also tolerate '1950', if 'yyyy' input passed to 'yy' format 328 result .setFullYear(v);325 result[0] = v; 329 326 expected.year = v; 330 327 } … … 348 345 v--; 349 346 } 350 result .setMonth(v);347 result[1] = v; 351 348 expected.month = v; 352 349 break; … … 371 368 break; 372 369 case 'd': 373 result .setDate(v);370 result[2] = v; 374 371 expected.date = v; 375 372 break; 376 373 case 'D': 377 //FIXME: need to defer this until after the year is set for leap-year? 378 result.setMonth(0); 379 result.setDate(v); 374 result[1] = 0; 375 result[2] = v; 380 376 break; 381 377 case 'a': //am/pm … … 410 406 //in the 12-hour case, adjusting for am/pm requires the 'a' part 411 407 //which could come before or after the hour, so we will adjust later 412 result .setHours(v);408 result[3] =v; 413 409 break; 414 410 case 'm': //minutes 415 result .setMinutes(v);411 result[4] = v; 416 412 break; 417 413 case 's': //seconds 418 result .setSeconds(v);414 result[5] = v; 419 415 break; 420 416 case 'S': //milliseconds 421 result .setMilliseconds(v);417 result[6] = v; 422 418 // break; 423 419 // case 'w': … … 430 426 }); 431 427 432 //validate parse date fields versus input date fields 433 if(!valid || 434 (expected.year && result.getFullYear() != expected.year) || 435 (expected.month && result.getMonth() != expected.month) || 436 (expected.date && result.getDate() != expected.date)){ 437 return null; 438 } 439 440 var hours = result.getHours(); 428 var hours = result[3]; 441 429 if(amPm === 'p' && hours < 12){ 442 result .setHours(hours + 12); //e.g., 3pm -> 15430 result[3] = hours + 12; //e.g., 3pm -> 15 443 431 }else if(amPm === 'a' && hours == 12){ 444 result .setHours(0); //12am -> 0432 result[3] = 0; //12am -> 0 445 433 } 446 434 447 435 //TODO: implement a getWeekday() method in order to test 448 436 //validity of input strings containing 'EEE' or 'EEEE'... 449 return result; // Date 437 438 var dateObject = new Date(result[0], result[1], result[2], result[3], result[4], result[5], result[6]); // Date 439 440 // Do some bounds checking. The Date() constructor normalizes things like April 32nd... 441 //TODO: why isn't this done for times as well? 442 if(!valid || 443 (expected.year && dateObject.getFullYear() != result[0]) || 444 (expected.month && dateObject.getMonth() != result[1]) || 445 (expected.date && dateObject.getDate() != result[2])){ 446 return null; 447 } 448 449 return dateObject; // Date 450 450 }; 451 451