简体   繁体   中英

setHours() convert my Date object in string timestamp

I try to set a date to midnight to simplify my date manipulation, for this I wrote this part of code:

var now = new Date();
today = now.setHours(0,0,0,0);
console.log(now, today);

I'm surprised to see now contains a Date object and today a timestamp. This brings errors when I want to use getMonth() or other date's functions. It's paintful to recreate a Date object with the timestamp.

Is it normal? How can I fix this?

(Feel free to update my post to correct my bad english :)

Is it normal?

Yes

How can I fix this?

You are assigning the return value of now.setHours(0,0,0,0) to today .

Maybe what you are looking for is something like this:

var now = new Date();

var today = new Date();
today.setHours(0,0,0,0);

In this way, setHours is acting upon the value you wish to have the hours set on. This is the primary manner of using setHours .

Other details

  • The specification doesn't appear to mention the return value. Other sites such as w3schools do.
  • The Chromium setHours source shows a value being return though other functions that perform similarly do not return this value. I presume that the SET_LOCAL_DATE_VALUE function found in chromium's date.js is assigning the value into the first argument.

You can manipulate dates easily using datejs or momentjs

date.js:

   Date.today().set({ hour : 0 });

moment.js

   moment().set({ "hour": 0, "minute" : 0, "second": 0});

I had a similar situation and pcnate answer didn't solved my issue...

What I did was:

var today = new Date();
today = new Date(today.setHours(0,0,0,0));
console.log('Date: '+today);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM