2015-12-09 9 views
5

Próbuję uzyskać pierwszą i ostatnią datę bieżącego miesiąca za pomocą Node.js.Jak uzyskać pierwszą datę bieżącego miesiąca w Node.js?

następujący kod jest doskonale działa w przeglądarce (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); 

Ale to pokazuje inny wynik w Node.js. Jak mogę to naprawić?

+2

Jakie są różne wyniki? publikuj wyniki dla przeglądarki/nodejs – shennan

+1

[This] (http://stackoverflow.com/questions/7481963/how-come-my-javascript-node-js-is-giving-me-the-incorrect-timestamp) może pomóc. –

+0

W przeglądarce Wt 01 01 2015 00:00:00 GMT + 0530 (IST) czw 31 grudnia 2015 00:00:00 GMT + 0530 (IST) W węźle js 2015-11-30T18: 30: 00 000Z - 2015-12-30T18: 30: 00.000Z –

Odpowiedz

3

Zmiana natywnej Date obiektu w przyjętym odpowiedzi jest złą praktyką; Nie rób tego (https://stackoverflow.com/a/8859896/3929494)

Należy użyć moment.js aby dać spójne środowisko do obsługi dat w JavaScript pomiędzy node.js i wszystkich przeglądarek - zobaczyć go jako warstwy abstrakcji. http://momentjs.com/ - jest dość łatwy w użyciu.

Bardzo podobny przykładem jest tutaj: https://stackoverflow.com/a/26131085/3929494

Można spróbować go on-line na https://tonicdev.com/jadaradix/momentjs

+0

Nie sądzę, że ktokolwiek * potrzebuje *, aby użyć pliku moment.js, aby uzyskać spójność w danych wyjściowych między dwoma środowiskami JS. Nie wyjaśniłeś tutaj, dlaczego OP ma różnicę w datach wyjściowych – shennan

+0

Zmieniono "need" na "should" .Korzystanie z metod takich jak 'endOf' spowoduje unieważnienie wielu szablonów.Stare przeglądarki również popełniają błędy z datami, które zajmie się biblioteką, na przykład moment.js. Jest to wyraźna wygrana, gdy trzeba uporać się z internacjonalizacją .Nie wiem, dlaczego istnieje różnica, myślę, że moim celem jest to, że użycie pliku moment.js usunie wszystkie możliwe Różnice: –

+1

Nie dyskredytuję chwili.js jako dobrej abstrakcji, mówię tylko, że sam moment.js nie jest odpowiedzią na konkretny problem, może pomóc w rozwiązaniu problemu, ale nikogo nie kształci na różnice między NodeJS a utrzymywaniem czasu przeglądarki. Będę dawać +1, ponieważ jest lepszy niż obecna aktualna odpowiedź. – shennan

-2

spojrzeć na kod

<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

Jak mogę zmienić jego format na DD/MM/RRRR? –

+0

Jak ta odpowiedź ma pomóc? Nie zajmuje się rozbieżnością między NodeJS a przeglądarką, którą OP twierdzi, że widział ... – shennan

+0

Nie jestem programistą geek w węźle lub javascript, Ten kod daje mi dokładnie to, co chcę. –

0

Wyjście przeglądarka wyświetla datę w bieżącej strefie czasowej, node.js pokazuje datę GMT/Strefa czasowa Zulu.

(Edycja: Kod dodany). Coś podobnego do tego:

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

Czy możesz udostępnić przykładowy kod? jeśli jakikolwiek jako obejście –

Powiązane problemy