Como obter o tipo de entrada HTML 5 = "date" trabalhando no Firefox e / ou IE 10


191

Acho estranho que input type="date"ainda não seja suportado no Firefox depois de todo esse tempo. Na verdade, não acho que eles tenham adicionado muito (se houver) dos novos tipos do HTML 5 a um elemento de entrada. Não é surpresa que ele não seja suportado no IE10. Então, minha pergunta é ...

Como obter type="date"um inputelemento que funcione sem adicionar outro arquivo .js (ou seja, o jQueryUIDatePicker Widget) apenas para obter um calendário / data apenas para os navegadores IE e Firefox? Existe algo lá fora que possa ser aplicado em algum lugar (CDN, talvez?) Que fará essa funcionalidade funcionar por padrão no Firefox e / ou nos navegadores IE? Tentar direcionar os navegadores IE 8+ e para o Firefox, não importa, a versão mais recente (28.0) ficará boa.

ATUALIZAÇÃO: Firefox 57+ suporta tipo de entrada = data


29
Parece ridículo para mim que o Firefox ainda não suporta isso. Eu mudei do Chrome para o Firefox hoje, apenas por um dia / semana para ver o que é hoje em dia, e isso imediatamente me faz querer voltar!
Codemonkey

19
sua data de uma piada FF não supping
SuperUberDuper

6
É por isso que fico chateado quando as pessoas dizem que o Firefox é o melhor navegador.
Martin Braun

1
Embora não seja um polyfill, eu só acabou usando pickaday que é um JS simples lib sem jQuery ou outras dependências ...
MB21

2
Parece estar funcionando por padrão no Firefox 57. Ainda!
Antoine Pinsard

Respostas:


138

Você pode experimentar webshims , que está disponível no cdn +, apenas carrega o polyfill, se necessário.

Aqui está uma demonstração com a CDN: http://jsfiddle.net/trixta/BMEc9/

<!-- cdn for modernizr, if you haven't included it already -->
<script src="http://cdn.jsdelivr.net/webshim/1.12.4/extras/modernizr-custom.js"></script>
<!-- polyfiller file to detect and load polyfills -->
<script src="http://cdn.jsdelivr.net/webshim/1.12.4/polyfiller.js"></script>
<script>
  webshims.setOptions('waitReady', false);
  webshims.setOptions('forms-ext', {types: 'date'});
  webshims.polyfill('forms forms-ext');
</script>

<input type="date" />

Caso a configuração padrão não seja satisfatória, existem várias maneiras de configurá- la. Aqui você encontra o configurador do datepicker .

Nota: Embora possa haver novas versões de correções para webshim no futuro. Não haverá mais lançamentos importantes. Isso inclui suporte para o jQuery 3.0 ou qualquer novo recurso.


isso é bom solução, a configuração é rico, mas eu não consigo encontrar onde formato de data do jogo como "AAAA / MM / DD"
Pavel Niedoba

14
Eu recebo um erro "acesso negado" quando tento executar esse jsfiddle no IE 11, e o seletor de datas não funciona.
Shavais 06/04/2015

4
Isso não funciona em IE10 ... eu recebo o mesmo erro como mencionado por @Shavais ... para fazê-lo funcionar atualizar a versão jQuery para 1,11 ou above..try esta ligação
Nitin

2
Infelizmente, o suporte ao webshims para o próximo Jquery 3 não será feito, conforme informado no site do autor. Sendo assim, eu confiaria na boa e velha interface do Jquery.
Marionmaiden

1
Definitivamente, isso funciona no Firefox. Mas não funcionou no IE
Varuni NR 24/03/16

27

Está no Firefox desde a versão 51 (26 de janeiro de 2017), mas não está ativado por padrão (ainda)

Para ativá-lo:

about: config

dom.forms.datetime -> definido como true

https://developer.mozilla.org/pt-BR/Firefox/Experimental_features


Contente de ouvir isso. Deve estar ativado por padrão imo. Mas isso é bom de saber.
Solomon Closson

Estou no FF 64.0.2, mas mesmo que essa opção seja "true" (ativada), ela não funciona, a caixa de data e hora ainda é apenas texto. Eu tentei habilitar o "timepicker" também sem sucesso.
Wasted_Coder

20

Existe uma maneira simples de se livrar dessa restrição usando o componente datePicker fornecido pelo jQuery.

  1. Incluir bibliotecas jQuery e jQuery UI (ainda estou usando uma antiga)

    • src = "js / jquery-1.7.2.js"
    • src = "js / jquery-ui-1.7.2.js"
  2. Use o seguinte recorte

    $(function() {
         $( "#id_of_the_component" ).datepicker({ dateFormat: 'yy-mm-dd'}); 
    });

Consulte DatePicker da interface do usuário do jQuery - Altere o formato da data, se necessário.


8
O OP diz "trabalhando sem adicionar, mais um arquivo .js (ou seja, jQueryUI DatePicker Widget)" ... mas essa pergunta é o principal hit do google, então sua resposta ainda é MUITO útil mesmo que não responda à pergunta. Gostaria de não ter que me sentir mal por votar em sua postagem agora.
phil294

2
Você precisa incluir o CSS da UI do jQuery também para mostrar o calendário corretamente. <br> <link rel = "stylesheet" href = "// code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
YuAn Shaolin Maculelê Lai

16

O tipo = "data" não é uma especificação real neste momento. É um conceito que o Google criou e está em suas especificações whatwg (não oficiais) e é apenas parcialmente suportado pelo Chrome.

http://caniuse.com/#search=date

Eu não confiaria nesse tipo de entrada neste momento. Seria bom ter, mas não prevejo que este seja realmente o suficiente. O motivo número 1 é que sobrecarrega o navegador para determinar a melhor interface do usuário para uma entrada um pouco complicada. Pense nisso de uma perspectiva responsiva: como um fornecedor saberia o que funcionaria melhor com sua interface do usuário com 400 pixels, 800 pixels e 1200 pixels de largura?


138
Não concordo, os navegadores devem ser inteligentes o suficiente para descobrir isso. Estou realmente cansado de usar os selecionadores de datas por aí e ter que continuar atualizando-os.
SuperUberDuper

49
Raciocínio estranho. Muita carga para os navegadores, mas não para o joe web developer?!?
jeroenh

35
Agora isso faz parte do rascunho de trabalho do HTML 5: w3.org/html/wg/drafts/html/master/…
Chris

7
Também estou feliz por cada novo tipo de entrada. Eles são melhor definidos e nativos, o que geralmente significa rápido.
Tomáš Zato - Restabelece Monica

5
@ MM Obrigado. Entretanto, o HTML 5 foi atualizado para uma recomendação oficial do W3C. O novo link é w3.org/TR/2014/REC-html5-20141028/…
Chris

9

Aqui está um exemplo completo com a data formatada em AAAA-MM-DD

<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.min.js"></script> 
<script src="//cdn.jsdelivr.net/webshim/1.14.5/polyfiller.js"></script>
<script>
webshims.setOptions('forms-ext', {types: 'date'});
webshims.polyfill('forms forms-ext');
$.webshims.formcfg = {
en: {
    dFormat: '-',
    dateSigns: '-',
    patterns: {
        d: "yy-mm-dd"
    }
}
};
</script>
<input type="date" />

1
Alguém sabe se isso permite a opção de adicionar um selecionador de tempo também?
Drooh

Eu tentei o seu script no JSFiddle @Drooh, mas ele não funciona. Toda vez que eu seleciono uma data, ela aparece como um milissegundo no campo de entrada e depois desaparece. Alguém pode fornecer uma versão funcional do violino com uma configuração de data dd / mm / aaaa?
Ryan Coolwebs

Observe que, a partir de agosto de 2016, o webshim não funciona com o jQuery 3 e, nos meus testes, também não funciona com o 2.2.4.
drooh

Descobri que esta é a melhor solução até o Firefox adicionar uma entrada de data stackoverflow.com/questions/2528706/…
drooh

4

Embora isso não permita que você obtenha uma interface do usuário do datepicker, o Mozilla permite o uso de padrão, então você pode pelo menos obter a validação de data com algo como isto:

pattern='(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))'

Por fim, concordo com o @SuperUberDuper, pois o Mozilla está muito atrasado ao incluir isso nativamente.


1
existe uma versão para "tempo"?
Malcolm Salvador

1
Por favor, expanda este exemplo. Este é um atributo html para a entrada?
Wasted_Coder

3

Esta é apenas uma sugestão que segue a resposta de Dax. (Eu o colocaria em um comentário nessa resposta, mas ainda não tenho reputação suficiente para comentar sobre outras perguntas).

Os IDs devem ser exclusivos para todos os campos. Portanto, se você tiver vários campos de data em seu formulário (ou formulários), poderá usar o elemento de classe em vez do ID:

 $(function() { $( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' }); });

e sua entrada como:

 <input type="text" class="datepicker" name="your-name" />

Agora, sempre que precisar do seletor de datas, basta adicionar essa classe. PS: Eu sei, você ainda precisa usar o js :(, mas pelo menos está definido para todo o seu site. Meus 2 centavos ...


3

A versão mais recente do firefox, o firefox 57 (Quantum), suporta a data e outros recursos, foi lançada em 14 de novembro de 2017. Você pode baixá-lo clicando neste link


0

Obrigado Alexander, encontrei uma maneira de modificar o formato para en lang. (Não sabia qual idioma usa esse formato)

 $.webshims.formcfg = {
        en: {
            dFormat: '/',
            dateSigns: '/',
            patterns: {
                d: "yy/mm/dd"
            }
        }
     };

 $.webshims.activeLang('en');

Eu acho que o único país 'en' que usa esse formato é o Canadá. De qualquer forma, 'en' é ambíguo, porque também inclui os Estados Unidos, que têm um formato de data 'especial' praticamente próprio.
Michael Scheper

No meu caso, trata-se de substituir o formato de data para qualquer localidade do cliente, que pode diferir nas estações de trabalho do cliente. No entanto, em uma página específica, desejo usar esse formato de data (por motivo de copiar e colar). É mais como um comentário para a resposta de Alexander Farkas, mas coloquei como resposta separada porque não consigo colar o código no comentário. Estou usando isso no ambiente de produção há mais de um ano.
Pavel Niedoba

Seja cuidadoso. Se o Webshims se basear na interpretação do local do navegador, você poderá ter resultados imprevisíveis. 'en' provavelmente não significará o mesmo formato em plataformas diferentes (dependendo da localidade do sistema) ou mesmo em navegadores diferentes. Pode ser interpretado como 'en-ca' por um navegador no Canadá (que provavelmente é aaaa-mm-dd, mas possivelmente não consistente), mas 'en-in' por um navegador na Índia (que, como a maioria do mundo , produziria dd-mm-aaaa). Só porque está no código de produção, não significa que foi testado corretamente - muitos bugs do i18n existem no código de produção, mesmo em sites grandes.
Michael Scheper

A última linha $ .webshims.activeLang ('en'); deve forçar lang (ou localidade) aos webshims substituindo as configurações do navegador, para que o formato seja sempre o mesmo.
Pavel Niedoba

0

Às vezes, você não deseja usar o Datepicker http://jqueryui.com/datepicker/ no seu projeto porque:

  • Você não quer usar jquery
  • Conflito de versões jquery em seu projeto
  • A escolha do ano não é conveniente. Por exemplo, você precisa de 120 cliques no botão anterior para mudar para 10 anos atrás.

Por favor, veja meu código de navegador cruzado muito simples para inserir a data. Meu código se aplica apenas se o seu navegador não suportar a entrada de tipo de data

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Input Key Filter Test</title>
	<meta name="author" content="Andrej Hristoliubov anhr@mail.ru">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	
	<!-- For compatibility of IE browser with audio element in the beep() function.
	https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
	
	<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">		
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
	
</head>
<body>
	<h1>Date field</h1>
    Date:
    <input type='date' id='date' />
    New date: <span id="NewDate"></span>
    <script>
        CreateDateFilter('date', {
                formatMessage: 'Please type date %s'
                , onblur: function (target) {
                    if (target.value == target.defaultValue)
                        return;
                    document.getElementById('NewDate').innerHTML = target.value;
                }
                , min: new Date((new Date().getFullYear() - 10).toString()).toISOString().match(/^(.*)T.*$/i)[1]//'2006-06-27'//10 years ago
                , max: new Date().toISOString().match(/^(.*)T.*$/i)[1]//"2016-06-27" //Current date
                , dateLimitMessage: 'Please type date between "%min" and "%max"'
            }
        );
    </script>

</body>
</html>


3
Este código falha completamente. Não consigo digitar uma data porque o campo já está preenchido com "AAAA-MM-DD" e, se eu tentar limpá-lo, ele reaparecerá.
Stephen R

Por favor, não apague hífens. Testei com sucesso no Windows 10 Google Chrome 52, Firefox 41, Opera 39, Microsoft Edge, IE 11. Diga-me seu dispositivo, sistema operacional e navegador.
21316 Andrej

Na verdade, estou apenas acessando o link "Run Code Snippet" logo abaixo do seu comentário. Não consigo digitar uma data corretamente porque o espaço reservado "AAAA-MM-DD" está competindo ativamente comigo, em vez de desaparecer quando começo a digitar. Eu estou usando a mais recente Firefox no Windows 10.
Stephen R

1
não responde à pergunta porque viola a condição de não adicionar arquivos JS externos e, na verdade, o código em si é completamente pouco intuitivo de usar. força o formato ISO nas pessoas, mesmo quando não é o formato de data nativo, não pode digitar uma data nova quando a máscara de entrada reaparecer, não pode digitar a máscara de entrada como não é uma máscara, mas sim o texto real na caixa, precisa excluir a máscara como você digita. não de qualquer maneira melhor do que uma entrada padrão com validação de regex
MikeT 15/11



-1

Eu tive que usar bootstrap-datepicker plugin para fazer o calendário funcionar no Firefox 55 Portable:

https://bootstrap-datepicker.readthedocs.io/en/latest/

Compatível com o Bootstrap v2 e v3. Ele vem com uma folha de estilo independente, para que você não precise depender do Bootstrap.

Uso:

<input class="datepicker">

$('.datepicker').datepicker({
    format: 'mm/dd/yyyy'
});

-2
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery UI Datepicker - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script>
  $(function() {
    $( "#datepicker" ).datepicker();
  });
  </script>
</head>
<body>

<p>Date: <input type="text" id="datepicker"></p>


</body>
</html>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.