2014-05-13 17 views
5

Sto cercando di creare un oggetto data javascript nella funzione focus.add_days per aggiungere alcuni giorni alla data specificata in un elemento. il problema è che l'oggetto javascript non si aspetta una stringa "Y-m-d", quindi come posso creare l'oggetto data senza analizzare la stringa "Y-m-d" in pezzi, o è l'unico modo?Oggetto data JavaScript da <input type = date>

trigger = { 
fecha_ini: function(){ 
    $('input[name="fecha_ini"]').on('change',function(){ 
     console.log('hi'); 
     var fecha_fin = $(':input [name=fecha_fin]'); 
     var min = $(this).val(); 
     //here is where i pass the "Y-m-d" string as the date argument 
     var max = fechas.add_days(min,31*4); 
     fecha_fin.attr('min',min); 
     fecha_fin.attr('max',max); 
     fecha_fin.val(''); 
    }) 
    } 
}; 

fechas = { 
    add_days: function addDays(date, days) { 
    //here is where i use the string "Y-m-d" to create the date object, but obviusly doesnt work 
    var result = new Date(date); 
    result.setDate(date.getDate() + days); 
    return result; 
} 
}; 

trigger.fecha_ini(); 
+0

uno sguardo al moment.js – hgoebl

risposta

8

come posso creare l'oggetto data senza parsing della stringa "Y-m-d" in pezzi, o è l'unico modo?

Mentre Date.parse converte stringhe in y/m/d/formato ad oggetti data, l'analisi manuale è l'unico modo sensato:

// s is format y-m-d 
// Returns a date object for 00:00:00 local time 
// on the specified date 
function parseDate(s) { 
    var b = s.split(/\D/); 
    return new Date(b[0], --b[1], b[2]); 
} 

ES5 specifica un form of ISO 8601 che deve essere supportato da tutti i browser, tuttavia non è supportato in modo coerente o da tutti i browser in uso.

+0

grazie, così come ho insegnato dovrò dividere il testo, volevo solo sapere se c'era un migliore approccio al problema. – chagovelez1

+1

Non posso credere che questa sia la risposta corretta. Perché HTML5 ?! – cgatian

+0

@cgatian - [* "HTML5" è un buzword *] (https://html.spec.whatwg.org/multipage/introduction.html#is-this-html5?), È solo HTML. ;-) Una data in formato ISO 8601 analizzata dal costruttore di date incorporato verrà trattata come UTC, quindi gli utenti ad ovest di Greenwich vedranno le date del giorno precedente. Ma HTML li vuole trattati come "locali" ... vai a capire. – RobG

2

Con me funziona senza fare niente.

Ho appena scritto nuova data ($ ('# html5dateinput'). Val());

questo è tutto. Ottengo l'oggetto data corretto. Sto utilizzando Google Chrome ver 38 e l'ho testato su Firefox 33 con Ubuntu 14.04

+0

Ciò ha risultati molto incoerenti. al momento testato su Chrome e 'new Date (" 2017-10-19 ")' emette la data corretta in GMT mentre 'new Date (" 2017-10-9 ")' indica la data nel mio fuso orario. – Imme

1

Uso valueAsDate:

valueAsDate
Reso: Date

ritorni/Imposta il valore dell'elemento, interpretato come una data, o se null conversione non è possibile.

Demo:

<input type="date" id="d" value="2018-02-14"> 
 

 
<button onclick="console.log(document.getElementById('d').valueAsDate)"> 
 
change the date (or not) and click me 
 
</button>

Problemi correlati