Pergunta

Por que esse retorno javascript 108 em vez de 2008? ele começa o dia e mês correto, mas não o ano?

myDate = new Date();
year = myDate.getYear();

ano = 108?

Foi útil?

Solução

É um Y2K coisa, apenas os anos desde 1900 são contados.

Existem potenciais problemas de compatibilidade agora que getYear() foi preterido em favor de getFullYear() - de quirksmode :

Para tornar o assunto ainda mais complexo, Date.getYear () está obsoleta nos dias de hoje e você deve usar Date.getFullYear (), que, por sua vez, não é suportado pelos navegadores mais antigos. Se funcionar, no entanto, deve sempre dar o ano inteiro, ie. 2000 em vez de 100.

Seu navegador dá nos anos seguintes com estes dois métodos:

* The year according to getYear(): 108
* The year according to getFullYear(): 2008

Existem também diferenças de implementação entre o Internet Explorer e Firefox, como a implementação de getYear() do IE foi alterado para se comportar como getFullYear() - de IBM :

Por especificação ECMAScript, getYear retorna o ano menos 1900, originalmente concebido para retornar "98" para 1998. getYear foi reprovado no ECMAScript versão 3 e substituído por getFullYear ().

Internet Explorer mudou getYear () para trabalhar como getFullYear () e torná-lo Y2k-compliant, enquanto Mozilla manteve o comportamento padrão.

Outras dicas

Desde getFullYear não funciona em navegadores mais antigos, você pode usar algo como isto:

Date.prototype.getRealYear = function() 
{ 
    if(this.getFullYear)
        return this.getFullYear();
    else
        return this.getYear() + 1900; 
};

protótipo Javascript pode ser usado para estender objetos existentes, bem como C # métodos de extensão. Agora, nós podemos apenas fazer isso;

var myDate = new Date();
myDate.getRealYear();
// Outputs 2008

Verifique os docs. Não é uma questão Y2K - é a falta de uma questão Y2K! Esta decisão foi tomada originalmente em C e foi copiado em Perl, aparentemente, JavaScript, e provavelmente várias outras línguas. Que há muito tempo foi, aparentemente, ainda se sentia desejável usar anos de dois dígitos, mas notavelmente quem projetou a interface teve premeditação o suficiente para perceber que precisava pensar sobre o que aconteceria no ano de 2000 e além, então ao invés de apenas fornecer os dois últimos dígitos, eles forneceram o número de anos desde 1900. você pode usar os dois dígitos, se você estivesse com pressa ou queria ser arriscado. Ou se você queria o seu programa de continuar a trabalhar, você pode adicionar 100 ao resultado e usar de pleno direito anos de quatro dígitos.

Eu me lembro da primeira vez que fiz manipulação data em Perl. Estranhamente I ler os docs . Aparentemente, isso não é uma coisa comum. Um ou dois anos mais tarde, fui chamado ao escritório em 31 de dezembro de 1999 para reparar um erro que tinha sido descoberto no último minuto possível em algum código Perl contrato, coisas que eu nunca tinha tido nada a ver com. Foi este problema exato: a chamada data padrão retornou anos desde 1900, e os programadores tratado como um ano de dois dígitos. (Eles assumiram que deseja obter "00" em 2000.) Como um jovem programador inexperiente, ele fundiu minha mente que tínhamos pago tanto extra para um trabalho "profissional", e essas pessoas nem sequer se preocupou em ler a documentação. Era o início de muitos anos de desilusão; agora eu sou velho e cínico. :)

No ano de 2000, a conferência anual YAPC Perl foi referido como "YAPC 19100" em homenagem a este non-bug oft-relatados.

Hoje em dia, no mundo Perl, pelo menos, faz mais sentido usar um módulo padrão para a data-assistência, um que utiliza anos reais de quatro dígitos. Não sei o que pode estar disponível para JavaScript.

Ele deve retornar o número de anos desde o ano de 1900.

uso date.getFullYear().

Este é (como corretamente apontou outros lugares) é uma coisa Y2K. Netscape (escrito antes de 2000), originalmente retornou, por exemplo 98 de getYear(). Ao invés de voltar para 00, em vez voltou 100 para o ano de 2000. Em seguida, outros navegadores veio e fez isso de forma diferente, e todo mundo estava infeliz como incompatibilidade reinou.

navegadores posteriores getFullYear suportado como um método padrão para retornar o ano completo.

Esta questão é tão antiga que me faz chorar com nostalgia dos dias dotcom!

Isso mesmo, Date.getYear () retorna o número de anos desde 1900, assim como localtime do Perl (). Uma pergunta por que uma linguagem projetada na década de 1990 não representam o volume de negócios do século, mas o que eu posso dizer? Você tinha que estar lá. É uma espécie de feito um tipo de sentido no momento (como pets.com fez).

Antes de 2000, pode ter sido tentado para corrigir esse bug, acrescentando "19" para o resultado de getYear () resultando na "No ano 19100 bug" . Outros já respondeu a esta pergunta suficientemente (adicionar 1900 para o resultado de getDate ()).

Talvez o livro que você está lendo sobre JavaScript é um pouco velho?

Obrigado pela explosão do passado!

Você deve, como fora pontas, nunca use getYear(), mas sim usar getFullYear().

A história não é, contudo, tão simples como "instrumentos IE GetYear() como getFullYear(). Opera e IE estes dias getYear() tratar como getYear() foi originalmente especificado para datas antes de 2000, mas vai tratá-lo como getFullYear() para datas após 2000, enquanto webkit e Firefox ficar com o comportamento antigo

Esta saídas de 99 em todos os navegadores:

javascript:alert(new Date(917823600000).getYear());

Isso gera 108 em FF / WebKit, e 2008 no Opera / IE:

javascript:alert(new Date().getYear());

É mudo. Ele datas de pré-Y2K dias , e agora apenas retorna o número de anos desde 1900 por razões de legado. Use getFullYear () para obter o ano actual.

Eu estou usando date.getUTCFullYear(); trabalhar sem problemas.

O número que você recebe é o número de anos desde 1900. Não me pergunte por que ..

Como já foi dito, ele retorna o número de anos desde 1900. A razão pela qual ele faz que é que quando o JavaScript foi inventado em meados dos anos 90, que o comportamento era conveniente e consistente com APIs de data e hora em outros idiomas. Particularmente C. E, claro, uma vez que a API foi estabelecido não podiam mudá-lo por razões de compatibilidade para trás.

BTW, diferentes navegadores podem retornar resultados diferentes, por isso é melhor para ignorar esta função por completo e usar a getFullYear () sempre.

var date_object = new Date (); ano var = date_object.getYear (); if (ano <2000) { ano = ano + 1900; } // u obterá o ano inteiro ....

ele está retornando ano de 4 dígitos - 1900, que pode ter sido legal 9+ anos atrás, mas é muito retardado agora. java.util.Date Java também faz isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top