There is no reason to bring in moment timezone if you only need the user's local time. Moment timezone is only used when you need to display a time in a timezone other than UTC or the local time of the user.
If you wish to take a point on the global timeline, and display it as the user's local time, use the moment()
constructor function:
moment(1465297200000).format()
"2016-06-07T06:00:00-05:00"
Note that I am in a UTC-5 timezone right now, so the UTC time of the time stamp has been shifted back five hours, from "2016-06-07T11:00:00Z" to "2016-06-07T06:00:00-05:00".
I'm not sure why you would expect this to result in 16:30 GMT. Are you in fact wanting it to display in India Standard Time as 16:30? If the computer you are using is set to India time, this should work with the moment function.
To get the format you are looking for, you just need to specify the format tokens to the format function:
moment(1465297200000).format('MM-DD-YYYY HH:mm:ss')
"06-07-2016 06:00:00"
There is no need to call .toDate
when you are using moment unless you are interacting with a third party API that expects a date object.