Closed Bug 45764 Opened 24 years ago Closed 20 years ago

Y2K error in .getYear()

Categories

(Core :: JavaScript Engine, defect, P3)

x86
Windows 2000
defect

Tracking

()

RESOLVED DUPLICATE of bug 22964

People

(Reporter: simon.lucy, Assigned: rogerl)

Details

From Bugzilla Helper:
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
BuildID:    

I have the following function in navigator.js to update a date time string 
within the chrome.  getYear() returns '100'for the year 2000.

function datetimeDisplay()
{
	var dateObj = new Date()
	var hour = dateObj.getHours()
	var minutes = dateObj.getMinutes()
	var date = dateObj.getDate()
	var datedisplay = document.getElementById("NetDate");
	if( minutes < 10 ) {
		minutes = "0"+minutes ;
	}
	// javascript .getYear() isn't Y2K compliant 
	datedisplay.setAttribute("value", dateObj.getDate()+"/"+
(dateObj.getMonth()+1)+"/"+(2100-dateObj.getYear())+" "+hour+":"+minutes);
}

Any other to...String function works correctly
This is using M16 tarball


Reproducible: Always
Steps to Reproduce:
1. Create new Date variable
2. use variable.getYear()=
3. print the result and you'll see its '100' for the year 2000

Expected Results:  Should return a two digit year string (4 digit would be 
allowable)
Thank you for the submission! However, I'm afraid I have to mark this one 
as "Invalid", because the getYear() method is behaving according to spec.

(see ECMA Edition 3, 13 October 1999 - Section B.2.4)

The getYear() method has been superseded by the getFullYear() method.
For more details, see bug 22964.
Status: UNCONFIRMED → RESOLVED
Closed: 24 years ago
Resolution: --- → INVALID
Verifying Invalid -
Status: RESOLVED → VERIFIED
No problem, other than bugzilla failing again to come up with a previous bug 
report to save everyone time.

It might also be worth noting that IE doesn't have the same issue with getYear
().
Your point is well taken !

I've looked into this further, and obtained some history of the problem from the 
developers, below. I hope it is useful -


Here's what happened -

Between JavaScript versions 1.2 and 1.3, we rewrote the Javascript Date
object from the ground up.  It handles all date operations internally, with
as few dependencies on the underlying operating system as possible.  This
new implementation has been in the Netscape browsers since version 4.06.

Our implementation was based on the ongoing ECMA-262 standardization work for
JavaScript.  At the time, the ECMA-262 draft included a definition of
getYear that returned the year - 1900.  In other words, years in the 20th
century come out as two digits, and years in the 21st century come out as
three digits.  This behavior was different from many (but not all)
JavaScript Date implementations, but we retained it to be compliant with the
evolving standard.

Later, after the release of 4.06 and 4.5 browsers incorporating the new Date
code, the getYear method was dropped from the developing ECMA-262 standard,
as getFullYear serves the same purpose without the associated problems. 
(getYear remains as an appendix to the standard, but is not required for
compliance.)  Rather than revert to the old getYear behavior and force
scriptwriters to be aware of yet another version difference, we decided to
keep the year - 1900 behavior for getYear, and encourage the use of
getFullYear.

It's not an ideal situation, but that's the history.

For JavaScript code that must work across browser versions that may not have
the getFullYear method, please see Michelle Wyner's tech note at

http://developer.netscape.com/viewsource/wyner_2k/wyner_2k.html

*** Bug 161885 has been marked as a duplicate of this bug. ***
*** Bug 162843 has been marked as a duplicate of this bug. ***
*** Bug 187962 has been marked as a duplicate of this bug. ***
*** Bug 192241 has been marked as a duplicate of this bug. ***
*** Bug 192481 has been marked as a duplicate of this bug. ***
*** Bug 194789 has been marked as a duplicate of this bug. ***
*** Bug 224265 has been marked as a duplicate of this bug. ***
*** Bug 235837 has been marked as a duplicate of this bug. ***
*** Bug 160532 has been marked as a duplicate of this bug. ***
*** Bug 169766 has been marked as a duplicate of this bug. ***
*** Bug 228929 has been marked as a duplicate of this bug. ***
Status: VERIFIED → UNCONFIRMED
Resolution: INVALID → ---

*** This bug has been marked as a duplicate of 22964 ***
Status: UNCONFIRMED → RESOLVED
Closed: 24 years ago20 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.