Come posso precompilare una casella di testo jQuery Datepicker con la data odierna?


238

Ho un calendario jQuery Datepicker molto semplice:

$(document).ready(function(){
    $("#date_pretty").datepicker({ 
    });
});

e ovviamente in HTML ...

<input type="text" size="10" value="" id="date_pretty"/>

La data odierna è ben evidenziata per l'utente quando visualizzano il calendario, ma come faccio a ottenere jQuery per precompilare la casella di testo stessa con la data odierna sul caricamento della pagina, senza che l'utente faccia nulla? Il 99% delle volte, la data di default di oggi sarà quella che vogliono.


7
La risposta più popolare è migliore di quella accettata. è meglio cambiare la risposta accettata.
ahmadali shafiee,


1
@ahmadalishafiee (e tutti gli altri). La soluzione attualmente accettata è stata accettata il 07/05/2015.
Teepeemm,

Risposte:


569

Aggiornamento: ci sono rapporti che non funzionano più in Chrome.

Questo è conciso e fa il lavoro (obsoleto):

$(".date-pick").datepicker('setDate', new Date());

Questo è meno conciso, l'utilizzo del concatenamento gli consente di lavorare in Chrome (04-06-2019):

$(".date-pick").datepicker().datepicker('setDate', new Date());

3
Questa soluzione è elegante
nascosta il

2
Questa è quella che ha funzionato per me e non la soluzione accettata. Grazie
Mehdiway,

7
Questo non funzionerà, prima dovresti chiamare $ (". Date-pick"). Datepicker (); e poi $ (". date-pick"). datepicker ('setDate', new Date ());
Misha Akopov,

9
Non funziona più in Chrome dopo il recente aggiornamento del browser
Max Flex

3
Lavori. Sto impostando $(".date-pick").datepicker().datepicker('setDate', new Date()); Tho
Seebiscuit

221

È necessario PRIMA chiamata datepicker ()> quindi utilizzare 'setDate' per ottenere la data corrente.

$(".date-pick").datepicker();
$(".date-pick").datepicker("setDate", new Date());

O concatenare la chiamata del metodo setDate dopo l'inizializzazione di datepicker, come indicato in un commento su questa risposta

$('.date-pick').datepicker({ /* optional option parameters... */ })
               .datepicker("setDate", new Date());

Sarà NON funzionerà con un solo

$(".date-pick").datepicker("setDate", new Date());

NOTA : i parametri accettabili setDate sono descritti qui


3
Usando jQueryUI 1.8 ho trovato questa soluzione come l'unico (sano) modo per raggiungere questo obiettivo.
brianz,

13
$ (". selector"). datepicker (). datepicker ("setDate", nuova data ()); funzionerà e non farà jQuery cercare il DOM due volte.
abc123

1
Ottima risposta accettata che dice solo $ (". Date-pick"). Datepicker ("setDate", new Date ()); e non funziona senza prima chiamare $ (". date-pick"). datepicker (); la tua risposta è molto migliore
Misha Akopov,

72
var myDate = new Date();
var prettyDate =(myDate.getMonth()+1) + '/' + myDate.getDate() + '/' +
        myDate.getFullYear();
$("#date_pretty").val(prettyDate);

sembrava funzionare, ma potrebbe esserci un modo migliore là fuori ..


Funziona abbastanza bene tranne per due cose: 1) Speravo in qualche modo di usare il metodo jQuery per ottenere la data corrente, ma forse non importa. 2) questa soluzione produce un valore esattamente un mese prima della data odierna!
Marcus,

2
OH - hai ragione! dai un'occhiata - w3schools.com/jsref/jsref_obj_date.asp - il mese è 0-11 - dovrai aggiungere 1 .. curiosamente, getDate è 1-31, ma getMonth è 0-11 ..
lucas

3
C'è un modo più semplice .. vedi il mio post qui sotto.
Ravi Ram,

Questa soluzione consente di mostrare direttamente il testo e impostare contemporaneamente la data, mentre la soluzione CiscoIPPhone richiede un altro passaggio per mostrare il valore senza aprire il selettore.
Afshar Mohebbi,

4
Perché setDatepuoi anche usare la solita notazione relativa di datepicker, ad esempio per ottenere il giorno seguente basta digitare .datepicker('setDate', '+1d').
Kosii,

59

Il setDate()metodo imposta la data e aggiorna il controllo associato. Ecco come:

$("#datepicker1").datepicker({
    dateFormat: "yy-mm-dd"
}).datepicker("setDate", "0");

dimostrazione

Come menzionato nella documentazione, setDate()accetta felicemente l'oggetto, il numero o una stringa JavaScript Date:

La nuova data può essere un oggetto Date o una stringa nel formato data corrente (ad es. '01 / 26/2009 '), un numero di giorni a partire da oggi (ad es. +7) o una stringa di valori e punti (' y 'per anni, 'm' per mesi, 'w' per settimane, 'd' per giorni, ad esempio '+ 1m + 7d') o null per cancellare la data selezionata.

Nel caso ti stia chiedendo, l'impostazione della defaultDateproprietà nel costruttore non aggiorna il controllo associato.


1
Perché nella demo funziona. Quando copio questo codice nel mio sito, la finestra di dialogo continua ad apparire quando viene caricata la pagina.
chobo2,

1
Questo ha funzionato per me - la risposta accettata e altre opzioni sopra non lo hanno fatto.
Lydiat,

Questa è una soluzione molto, molto migliore di qualsiasi delle precedenti.
adamj,

La migliore risposta a questa domanda al momento, anche se avevo bisogno che il formato della data fosse "mm-gg-aa" per abbinare il selettore della data.
John81,

26

Impostato su oggi :

$('#date_pretty').datepicker('setDate', '+0');

Impostato su ieri :

$('#date_pretty').datepicker('setDate', '-1');

E così via con qualsiasi numero di giorni prima o dopo la data di oggi .

Vedi l' interfaccia utente di jQuery ›Metodi› setDate .


1
Ottimo, come altri hanno già detto, devi aver già chiamato Datepicker () già una volta,$(".date-pick").datepicker("setDate", '+0');
jwbensley

Questo ha funzionato anche come desideravo, poiché il mio dateFormat deve corrispondere al formato data di MySQL (yy-mm-dd). Questo setDate aggiunge il riempimento zero al mese e al giorno.
giovedì

9

La soluzione è:

$(document).ready(function(){
    $("#date_pretty").datepicker({ 
    });
    var myDate = new Date();
    var month = myDate.getMonth() + 1;
    var prettyDate = month + '/' + myDate.getDate() + '/' + myDate.getFullYear();
    $("#date_pretty").val(prettyDate);
});

Grazie grayghost!


7

Questo ha funzionato per me.

$('#inputName')
  .datepicker()
  .datepicker('setDate', new Date());

6

Questo codice assicurerà di utilizzare il formato del tuo datepicker:

$('#date-selector').datepicker('setDate', new Date());

Non è necessario riapplicare il formato, utilizza il datepicker predefinito-uno da te all'inizializzazione di datepicker (se lo hai assegnato!);)


5

Il codice di David K ​​Egghead ha funzionato perfettamente, grazie!

$(".date-pick").datepicker(); 
$(".date-pick").datepicker("setDate", new Date()); 

Sono anche riuscito a tagliarlo un po 'e ha anche funzionato:

$(".date-pick").datepicker().datepicker("setDate", new Date()); 

4
$('input[name*="date"]').datepicker({
        dateFormat: 'dd-mm-yy',
        changeMonth: true,
        changeYear: true,
        beforeShow: function(input, instance) { 
            $(input).datepicker('setDate', new Date());
        }
    });

2

Per impostare il datepicker su una determinata ora predefinita (la data corrente nel mio caso) al caricamento, E quindi avere la possibilità di scegliere un'altra data la sintassi è:

    $(function() { 
        // initialize the datapicker
        $("#date").datepicker();

        // set the time
        var currentDate = new Date();
        $("#date").datepicker("setDate",currentDate);

    //  set the options for the button  
        $("#date").datepicker("option",{
            dateFormat: 'dd/mm',
            showOn: "button",
          // whatever option Or event you want 
        });
  });

questa soluzione ha funzionato per me in Chrome, altri elencati qui no
Mike Volmar l'

2

Per precompilare la data, devi prima inizializzare datepicker, quindi passare il valore del parametro setDate.

$("#date_pretty").datepicker().datepicker("setDate", new Date());

1

Ho pensato di aggiungere i miei due centesimi. Il selettore viene utilizzato in un modulo di aggiunta / aggiornamento, quindi è necessario mostrare la data proveniente dal database se si modifica un record esistente o mostrare la data odierna in caso contrario. Di seguito funziona bene per me:

    $( "#datepicker" ).datepicker();
    <?php if (!empty($oneEVENT['start_ts'])): ?>
       $( "#datepicker" ).datepicker( "setDate", "<?php echo $startDATE; ?>" );
    <? else: ?>
       $("#datepicker").datepicker('setDate', new Date());   
    <?php endif; ?>
  });

1

Hai 2 opzioni:

OPZIONE A) Contrassegna come "attivo" nel tuo calendario, solo quando fai clic sull'input.

Js :

$('input.datepicker').datepicker(
                        {   
                            changeMonth: false,
                            changeYear: false,
                            beforeShow: function(input, instance) { 
                                $(input).datepicker('setDate', new Date());
                            }
                        }                         
                     );

Css :

div.ui-datepicker table.ui-datepicker-calendar .ui-state-active,
        div.ui-datepicker table.ui-datepicker-calendar .ui-widget-content .ui-state-active  {
            background: #1ABC9C;
            border-radius: 50%;
            color: #fff;
            cursor: pointer;
            display: inline-block;
            width: 24px; height: 24px;
        }​

OPZIONE B) Inserimento di default con oggi. Devi prima compilare il datepicker.

$ ("input.datepicker"). datepicker (). datepicker ("setDate", nuova data ());

1
l'opzione A è valida perché il selettore di date può rimanere vuoto fino a quando non viene selezionata una data in cui viene
impostata automaticamente la

0
var prettyDate = $.datepicker.formatDate('dd-M-yy', new Date());
alert(prettyDate);

Assegna prettyDate al controllo necessario.


0

Prova questo

$(this).datepicker("destroy").datepicker({
            changeMonth: false, changeYear: false,defaultDate:new Date(), dateFormat: "dd-mm-yy",  showOn: "focus", yearRange: "-5:+10"
        }).focus();

0

Questo funziona meglio per me poiché a volte ho problemi a chiamare .datepicker('setDate', new Date());in quanto incasina se ho lo datepicker già configurato con i parametri.

$("#myDateText").val(moment(new Date()).format('DD/MM/YYYY'));

0

Usa questo:

$(".datepicker").datepicker({ dateFormat: 'dd-M-yy' }).datepicker('setDate', new Date());

Per ottenere la data in formato Ad esempio: 10-ott-2019, che sarà più comprensibile per gli utenti.


-1
$(function()
{
$('.date-pick').datePicker().val(new Date().asString()).trigger('change');
});

Fonte: http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/datePickerDefaultToday.html


Il mio browser non ha riconosciuto la funzione asString (). L'ho fatto così: $ (". Date-pick"). Datepicker ('setDate', new Date ());
CiscoIPPhone

1
Penso che asString () dovrebbe essere toString ().
rg88,

1
DatePicker di Kevin Luck e DatePicker dell'interfaccia utente di Jquery sono due datepicker molto diversi.
Craig Hooghiem,

@gamerzfuse Il datepicker dell'interfaccia utente di jQuery si basa su quello di Kevin Luck.
Mathias Bynens,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.