Я изо всех сил пытаюсь узнать начало дня с учетом часовых поясов в javascript. Учтите следующее:
var raw_time = new Date(this.created_at);
var offset_time = new Date(raw_hour.getTime() + time_zone_offset_in_ms);
// This resets timezone to server timezone
var offset_day = new Date(offset_time.setHours(0,0,0,0))
// always returns 2011-12-08 05:00:00 UTC, no matter what the offset was!
// This has the same issue:
var another_approach_offset_day = new Date(offset_time.getFullYear(),offset_time.getMonth(),offset_time.getHours())
Я ожидаю, когда я передам смещение часового пояса Тихого океана, получу: 2011-12-08 08:00:00 UTC
и т. Д.
Как правильно этого добиться?
Я думаю, что отчасти проблема в том, что метод setHours устанавливает час (от 0 до 23) в соответствии с местным временем.
Также обратите внимание, что я использую javascript, встроенный в mongo, поэтому я не могу использовать какие-либо дополнительные библиотеки.
Спасибо!
Боже, это было очень сложно для меня, но вот окончательное решение, в котором я нашел следующее решение. Хитрость заключалась в том, что мне нужно было использовать setHours или SetUTCHours, чтобы получить начало дня - единственные варианты, которые у меня есть, - это системное время и UTC. Итак, я получаю начало дня UTC, затем добавляю обратно смещение!
// Goal is given a time and a timezone, find the beginning of day
function(timestamp,selected_timezone_offset) {
var raw_time = new Date(timestamp)
var offset_time = new Date(raw_time.getTime() + selected_timezone_offset);
offset_time.setUTCHours(0,0,0,0);
var beginning_of_day = new Date(offset_time.getTime() - selected_timezone_offset);
return beginning_of_day;
}