2009-07-27 31 views
46

Voglio trovare la data sottraendo il numero X di giorni da una data specifica in JavaScript. La mia funzione JavaScript accetta 2 parametri. Uno è il valore della data e l'altro è il numero di giorni che è necessario sottrarre.Ricerca della data sottraendo il numero X di giorni da una data specifica in Javascript

Ad esempio, ho passato la mia data argomento il 27 luglio 2009 e ho passato il mio altro argomento come 3. Quindi voglio calcolare la data 3 giorni prima del 27 luglio 2009. Quindi la data risultante che dovremmo ottenere è il 24 luglio. 2009. Come è possibile in JavaScript. Grazie per qualsiasi aiuto.

risposta

81

Semplicemente:

yourDate.setDate(yourDate.getDate() - daysToSubtract); 
+1

Grande Grazie !!! – ajithmanmu

+3

Non penso che funzionerà a meno che il giorno corrente del mese sia più dei giorni in cui stai sottraendo. – tvanfosson

+2

... per esempio funziona oggi con -3 perché oggi è il 27 (negli Stati Uniti, ma se oggi era il 2, si finirebbe con la nuova data di -1 e setDate morirà se si tenta di impostare il giorno del mese a un numero negativo – tvanfosson

1

Ecco un esempio, ma questo non fa nessun tipo di controllo (ad esempio, se lo si utilizza su 2009/07/01 si userà una giornata negativa o genera un errore

.
function subDate(o, days) { 
// keep in mind, months in javascript are 0-11 
return new Date(o.getFullYear(), o.getMonth(), o.getDate() - days);; 
} 
+0

Questo sembra funzionare anche (in Safari almeno). Sono rimasto sorpreso dalla risposta accettata. Apparentemente, regolerà il mese/anno per restituire una data valida: ad es. Data (2009, 6, 0) diventa Data (2009, 5, 30). –

+0

Lavora sia per Firefox che per Safari, anche con numeri negativi. – tvanfosson

0

Questo è quello che vorrei fare. Nota è possibile semplificare l'espressione, che ho appena scritto fuori per far capire che si stanno moltiplicando il numero di giorni per il numero di millisecondi in un giorno.

var newDate = new Date(yourDate.getTime() - (days * 24 * 60 * 60 * 1000)); 
+2

Non farlo; utilizzare invece giorni. Ciò potrebbe causare errori in luoghi che osservano l'ora legale. Ad esempio, "14 marzo 2011" meno 1 * 24 * 60 * 60 * 1000 è il 12 marzo 2011 per me. – Wiseguy

+0

Confermato. Questo approccio (erroneamente o almeno inaspettatamente) ha sottratto un'ora in più all'avvio dell'ora legale. – Seth

0

Solo un'altra opzione, che ho scritto:

DP_DateExtensions Library

E 'probabilmente eccessivo, se tutto quello che vogliamo fare è un calcolo, ma se avete intenzione di fare di più di manipolazione data si potrebbe trovare utile.

Supporta data/formattazione ora, data la matematica (aggiungere/parti della data sottrazione), data di confrontare, data di analisi, ecc

+0

Ho ricevuto un errore mentre facevo clic sul collegamento .. :-( – ajithmanmu

+0

Sembra funzionare per me ... niente che io possa vedere nei log - lo stai ancora ottenendo? Qual è l'errore? Grazie. –

22
function date_by_subtracting_days(date, days) { 
    return new Date(
     date.getFullYear(), 
     date.getMonth(), 
     date.getDate() - days, 
     date.getHours(), 
     date.getMinutes(), 
     date.getSeconds(), 
     date.getMilliseconds() 
    ); 
} 
+1

ha funzionato e IMHO è la migliore risposta.Ogni degli altri restituirebbe 38 dire se ho aggiunto 7 giorni al 31 di un mese.Grazie! – Grandizer

+0

Questo approccio si è dimostrato più affidabile per me - restituisce un oggetto 'Date', dove la risposta accettata mi dà un 'Int' – brichins

+0

E cosa succede se ci si trova il giorno 1 di un mese, e si sottraggono giorni e diventa negativo?' Data' lo gestisce? – Atticus

2

eccomi qui a postare una risposta più e che la data tornerà nel formato specifico .

In primo luogo è possibile ottenere la data corrente 10/08/2013 come di seguito

function Cureent_Date() { 
    var today_GMT = new Date(); 
    var dd = today_GMT.getDate(); 
    var mm = today_GMT.getMonth() + 1; //January is 0! 
    var yyyy = today_GMT.getFullYear(); 
    if (dd < 10) { 
     dd = '0' + dd 
    } 
    if (mm < 10) { 
     mm = '0' + mm 
    } 
    current_date = mm + '/' + dd + '/' + yyyy; 
    alert("current_date"+current_date); 

    Back_date(); 
} 

Ora torna data base on X giorni

function Back_date() 
{  
    var back_GTM = new Date(); back_GTM.setDate(back_GTM.getDate() - 2); // 2 is your X 
    var b_dd = back_GTM.getDate(); 
    var b_mm = back_GTM.getMonth()+1; 
    var b_yyyy = back_GTM.getFullYear(); 
    if (b_dd < 10) { 
     b_dd = '0' + b_dd 
    } 
    if (b_mm < 10) { 
     b_mm = '0' +b_mm 
    } 

    var back_date= b_mm + '/' + b_dd + '/' + b_yyyy; 
    alert("back_date"+back_date); 
} 

Così, oggi è 10/08/2013 così restituirà 10/06/2013.

Check Live Demo here Spero che questa risposta ti possa aiutare.

6

Mai andare per questa soluzione yourDate.setDate (yourDate.getDate() - daysToSubtract);

non funzionerà nel caso in cui la data è 1 ° di ogni mese e si desidera eliminare alcuni giorni dicono 1.

invece andare per il seguito soluzione che funzionerà sempre

var NewDate = new Date (yourDate .getTime() - (giorni * 24 * 60 * 60 * 1000));

+0

Questa è stata la soluzione migliore e più semplice che ho trovato finora che gestisce tutti i casi limite che tutti sembrano ignorare. – tokyo0709

0

questo è in riferimento al precedente risposta controllo questo violino

https://jsfiddle.net/uniyalguru/azh65aa0/

function Cureent_Date() { 
var today_GMT = new Date(); 
var dd = today_GMT.getDate(); 
var mm = today_GMT.getMonth() + 1; //January is 0! 
var yyyy = today_GMT.getFullYear(); 
if (dd < 10) { 
    dd = '0' + dd 
} 
if (mm < 10) { 
    mm = '0' + mm 
} 
current_date = mm + '/' + dd + '/' + yyyy; 
Problemi correlati