2015-12-09 14 views
5

Sto cercando di ottenere la prima e l'ultima data del mese corrente utilizzando Node.js.Come ottenere la prima data del mese corrente in Node.js?

seguito il codice è perfettamente funzionante browser (Chrome):

var date = new Date(), y = date.getFullYear(), m = date.getMonth(); 
var firstDay = new Date(y, m, 1); 
var lastDay = new Date(y, m + 1, 0); 

console.log(firstDay); 
console.log(lastDay); 

Ma sta mostrando un risultato diverso in Node.js. Come posso ripararlo?

+2

quali sono i diversi risultati? post risultati per browser/nodejs – shennan

+1

[questo] (http://stackoverflow.com/questions/7481963/how-come-my-javascript-node-js-is-giving-me-the-incorrect-timestamp) può aiutare. –

+0

Nel browser mar 01 dic 2015 00:00:00 GMT + 0530 (IST) gio 31 dicembre 2015 00:00:00 GMT + 0530 (IST) Nel nodo js 2015-11-30T18: 30: 00.000Z - 2015-12-30T18: 30: 00.000Z –

risposta

3

Modifica della Date oggetto nativo in risposta accettata è una cattiva pratica; non farlo (https://stackoverflow.com/a/8859896/3929494)

Si dovrebbe usare moment.js per darvi un ambiente coerente per la gestione di date in JavaScript tra node.js e tutti i browser - vederlo come un livello di astrazione. http://momentjs.com/ - è abbastanza facile da usare.

Un esempio molto simile è qui: https://stackoverflow.com/a/26131085/3929494

si può provare on-line sul https://tonicdev.com/jadaradix/momentjs

+0

Non penso che * nessuno * debba usare moment.js per ottenere coerenza nell'output della Data tra due ambienti JS. Non hai spiegato qui perché l'OP ha una differenza nell'output della data: – shennan

+0

Ho cambiato "need" in "should". L'uso di metodi come "endOf" renderà nullo molto il boilerplate. Una libreria come moment.js si occuperà di: è una vittoria chiara quando devi affrontare anche l'internazionalizzazione Non so perché c'è una differenza, penso che il mio punto è che usare moment.js rimuoverà tutto il possibile differenze –

+1

Non sto screditando moment.js come una buona astrazione, sto solo dicendo che moment.js non è una risposta al problema specifico. Può essere d'aiuto come un risolutore di problemi generali, ma non educa nessuno sul differenze tra NodeJS e tempo di navigazione del browser. Io farò +1 perché è migliore dell'attuale risposta in carica. – shennan

-2

guardare il codice

<html> 
<head> 
    <title>Please Rate if it helps</title> 
    <script> 
     Date.prototype.getMonthStartEnd = function (start) { 
      var StartDate = new Date(this.getFullYear(), this.getMonth(), 1); 
      var EndDate = new Date(this.getFullYear(), this.getMonth() + 1, 0); 
      return [StartDate, EndDate]; 
     } 
     window.onload = function() { 
      document.write(new Date().getMonthStartEnd()); 
     } 
    </script> 
</head> 
<body> 
</body> 
</html> 
+0

Come posso modificare il suo formato in GG/MM/AAAA? –

+0

Come si suppone che questa risposta aiuti? Non affronta la discrepanza tra NodeJS e il browser che l'OP afferma di aver visto ... – shennan

+0

Non sono un programmatore smanettone in nodo o javascript, questo codice mi sta dando esattamente quello che voglio. –

0

L'uscita del browser sta mostrando la data nel fuso orario corrente, Node.js sta mostrando la data GMT/Fuso orario Zulu.

(Modifica: codice aggiunto). Qualcosa di simile

var offset = (new Date().getTimezoneOffset()/60) * -1; 
var d = new Date(); 
var tmpDate = new Date(d.getTime()+offset); 
var y = tmpDate.getFullYear(); 
var m = tmpDate.getMonth(); 
var firstDay = new Date(y, m, 1); 
var lastDay = new Date(y, m + 1, 0); 

console.log(tmpDate.toString()); 
console.log(firstDay.toString()); 
console.log(lastDay.toString()); 
+0

Puoi condividere il codice di esempio? se del caso come soluzione alternativa –

Problemi correlati