Как я могу узнать дневное время пользователей с помощью timestamp и utc_offset? - PullRequest
1 голос
/ 05 мая 2020

Мне нужно получить дневное время (с 9:00 до 20:00) пользователей, и у меня есть временная метка их даты присоединения, аббревиатуры часового пояса и utc_offset. Я отправляю уведомление из облачной функции firebase в их дневное время.

следующая информация, которая у меня есть:

timezone_abbreviation = CST

timestamp = 1578422400991

utc_offset = -21600

Если я могу получить имя часового пояса, тогда я могу получить дневное время с помощью метода moment_timezon tz ()

const time = moment.tz(timestamp, timezone_name).format('HH:mm');
const hour = +temp.split(':')[0];
const isDayTime = hour >= 9 && hour < 20;

Есть предложения?

1 Ответ

0 голосов
/ 05 мая 2020

На самом деле с заданным смещением ut c очень легко получить необходимую информацию.

источник

Что касается сокращений часовых поясов, вам нужно l oop через все названия зон и найдите ту, в которой указано сокращение. Это ненадежно и не рекомендуется.

источник

Я сделал быстрый фрагмент с двумя решениями.

Проверьте это !

const timestamp = moment().valueOf();
const timezone_abbreviation = "IST";
const utc_offset = "+05:30"; // or 330

const getTimezoneFromAbbreviation = (() => {
  const timezones = moment.tz.names().map(zone => moment.tz.zone(zone))

  return (abbreviation) => {
    const filteredTimezones = timezones.filter(zone => zone.abbrs.includes(abbreviation));
    
    if(!filteredTimezones.length) {
      return null;
    }
    
    if(filteredTimezones.length > 1) {
      //console.log(filteredTimezones.map(zone => zone.name));
    }
    
    return filteredTimezones[0];
  }
})()

const timezone = getTimezoneFromAbbreviation(timezone_abbreviation)
const getHourFromTimezone = (timestamp, timezone) => {
  return Number(moment.tz(timestamp, timezone).format('HH'));
}

const getHourFromUTCOffset = (timestamp, utc_offset) => {
  return Number(moment(timestamp).utcOffset(utc_offset).format('HH'));
}

let hour = getHourFromTimezone(timestamp, timezone.name);
let isDayTime = hour >= 9 && hour < 20;

console.log({
  hour,
  isDayTime
})

hour = getHourFromUTCOffset(timestamp, utc_offset);
isDayTime = hour >= 9 && hour < 20;

console.log({
  hour,
  isDayTime
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.28/moment-timezone-with-data.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.28/moment-timezone-utils.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...