Por que este javascript retorna 108 em vez de 2008? obtém o dia e o mês corretos, mas não o ano?
myDate = new Date();
year = myDate.getYear();
ano = 108?
javascript
date
ctrlShiftBryan
fonte
fonte
year = myDate.getFullYear() % 100;
Respostas:
É uma coisa do Y2K , apenas os anos desde 1900 são contados.
Existem possíveis problemas de compatibilidade agora que
getYear()
foram substituídos porgetFullYear()
- do modo quirks :Também há diferenças de implementação entre o Internet Explorer e o Firefox, já que a implementação do IE
getYear()
foi alterada para se comportar comogetFullYear()
- da IBM :fonte
Como getFullYear não funciona em navegadores mais antigos, você pode usar algo assim:
O protótipo Javascript pode ser usado para estender objetos existentes, bem como métodos de extensão C #. Agora, podemos simplesmente fazer isso;
fonte
Verifique a documentação. Não é um problema do Y2K - é a falta de um problema do Y2K! Esta decisão foi tomada originalmente em C e foi copiada em Perl, aparentemente em JavaScript e provavelmente em várias outras linguagens. Isso, há muito tempo, aparentemente ainda parecia desejável usar anos de dois dígitos, mas, notavelmente, quem projetou essa interface teve bastante premeditação para perceber que precisava pensar sobre o que aconteceria no ano 2000 e além, então, em vez de apenas fornecer os dois últimos dígitos, eles forneciam o número de anos desde 1900. Você poderia usar os dois dígitos, se estivesse com pressa ou quisesse arriscar. Ou, se quiser que seu programa continue a funcionar, você pode adicionar 100 ao resultado e usar anos completos de quatro dígitos.
Lembro-me da primeira vez que fiz manipulação de datas em Perl. Estranhamente, li os documentos . Aparentemente, isso não é uma coisa comum. Um ou dois anos depois, fui chamado ao escritório em 31 de dezembro de 1999 para consertar um bug que havia sido descoberto no último minuto possível em algum código Perl de contrato, coisas com as quais eu nunca tive nada a ver. Era exatamente este o problema: a chamada de data padrão retornava anos desde 1900, e os programadores o tratavam como um ano de dois dígitos. (Eles presumiram que conseguiriam "00" em 2000.) Como um jovem programador inexperiente, fiquei espantado ao saber que havíamos pago tanto a mais por um trabalho "profissional", e aquelas pessoas nem mesmo se preocuparam em ler o documentação. Foi o início de muitos anos de desilusão; agora estou velho e cínico. :)
No ano 2000, a conferência anual YAPC Perl foi referida como "YAPC 19100" em homenagem a este não-bug freqüentemente relatado.
Hoje em dia, pelo menos no mundo Perl, faz mais sentido usar um módulo padrão para tratamento de datas, que usa anos reais de quatro dígitos. Não tenho certeza do que pode estar disponível para JavaScript.
fonte
Deve retornar o número de anos desde o ano de 1900.
fonte
usar
date.getFullYear()
.Isto é (como corretamente apontado em outro lugar) é uma coisa Y2K. Netscape (escrito antes de 2000) retornou originalmente, por exemplo,
98
degetYear()
. Em vez de retornar00
, ele retornou100
para o ano de 2000. Então, outros navegadores surgiram e fizeram isso de maneira diferente, e todos ficaram descontentes quando a incompatibilidade reinou.Navegadores posteriores são suportados
getFullYear
como método padrão para retornar o ano completo.fonte
Essa pergunta é tão antiga que me faz chorar de saudade dos dias pontocom!
Isso mesmo, Date.getYear () retorna o número de anos desde 1900, assim como o localtime () do Perl. É de se perguntar por que uma linguagem projetada nos anos 1990 não seria responsável pela virada do século, mas o que posso dizer? Você tinha que estar lá. Isso fazia sentido na época (como o pets.com).
Antes de 2000, alguém poderia ficar tentado a corrigir esse bug acrescentando "19" ao resultado de getYear () resultando no "bug do ano 19100" . Outros já responderam a essa pergunta suficientemente (adicione 1900 ao resultado de getDate ()).
Talvez o livro que você está lendo sobre JavaScript seja um pouco antigo?
Obrigado pela explosão do passado!
fonte
Você deve, como apontado, nunca usar
getYear()
, mas sim usargetFullYear()
.A história, entretanto, não é tão simples quanto "o IE implementa
GetYear()
comogetFullYear()
. Opera e IE atualmente tratamgetYear()
comogetYear()
foi originalmente especificado para datas anteriores a 2000, mas tratá-lo-ão comogetFullYear()
para datas posteriores a 2000, enquanto o webkit e o Firefox mantêm o comportamento antigoIsso resulta em 99 em todos os navegadores:
A saída é 108 no FF / WebKit e 2008 no Opera / IE:
fonte
Isso é idiota. Ele data de dias anteriores ao Y2K e agora retorna apenas o número de anos desde 1900 por motivos de legado. Use getFullYear () para obter o ano real.
fonte
Estou usando
date.getUTCFullYear()
; trabalhando sem problemas.fonte
O número que você obtém é o número de anos desde 1900. Não me pergunte por quê ..
fonte
Como outros disseram, ele retorna o número de anos desde 1900. O motivo disso é que, quando o JavaScript foi inventado em meados dos anos 90, esse comportamento era conveniente e consistente com APIs de data e hora em outras linguagens. Particularmente C. E, claro, depois que a API foi estabelecida, eles não puderam alterá-la por motivos de compatibilidade com versões anteriores.
fonte
BTW, navegadores diferentes podem retornar resultados diferentes, então é melhor pular essa função e usar getFullYear () sempre.
fonte
var date_object = new Date (); var ano = date_object.getYear (); if (ano <2000) {ano = ano + 1900; } // você terá o ano inteiro ....
fonte
ele está retornando ao ano de 4 dígitos - 1900, o que pode ter sido legal há mais de 9 anos, mas é bem retardado agora. Java.util.Date do Java também faz isso.
fonte