It is unclear whether you're asking about creating dates or formatting them as strings. But there is nothing unexpected here.
new Date(2017, 02, 10, 00, 00, 00, 000)
You should not use leading zeros on numbers. In some instances in older browsers it can indicate octal rather than decimal. Anyway, the above will produce a "local" date for 10 March 2017 at 00:00:00 based on the host system time zone setting. Yours seems to be set for UTC-08:00.
Given:
new Date("2017-02-10T00:00:00.000Z")
you're asking the Date constructor to parse a string, something it's notoriously bad at. However, browsers older than IE 8 should parse it correctly and produce a date for 10 March 2017 at 00:00:00 UTC, which has a timezone offset of 00:00.
Since your timezone is -08:00, when you write it to output the values will be adjusted for the host timezone (i.e. local) so you see a date for 9 March 2017 at 16:00:00 (or 4 pm).
Note that using the built–in Date.prototype.toString will result in an implementation dependent string that may be different in each host. If you need information on formatting a date, see Where can I find documentation on formatting a date in JavaScript? or How to format a JavaScript date.
Is the only effective way is to use "moment.js" to solve these issues.
It's unclear what issues you're trying to solve, however a good, light, parsing and formatting library is fecha.js. If you also want to do arithmetic, you might find moment.js suitable. But it's not difficult to write a function to parse specific formats or create suitable strings, see the above links.