Как проверить, нет ли у кого-то дня рождения в JS (с часовым поясом)? - PullRequest
0 голосов
/ 03 августа 2020

Ранее я спросил о концепциях хранения дат рождения и уведомления пользователей, после просмотра некоторых библиотек я решил go для date-fns и date-fns-tz, я решил, что могу хранить даты следующим образом:

import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";

// Picked by user
const timeZone = "America/Los_Angeles";
const birthDate = "03-11";

const utcDate = zonedTimeToUtc(`2000-${birthDate} 00:00:00`, timeZone);

// Stored in database
console.log(utcDate.toISOString(), timeZone);

Мне все еще не хватает концепции, потому что я застрял в той части, где я проверяю, есть ли у кого-то день рождения, независимо от того, где размещен мой сервер, скажем, я запускаю задание cron на 0 0 * * *, как бы я знаете, кому послать сообщение? Я принимаю решение postgres или JavaScript (или комбинированное)

1 Ответ

0 голосов
/ 03 августа 2020

Мы можем сделать запрос PostgreSQL следующим образом

SELECT * FROM TABLE_NAME 
WHERE
     DATE_PART('day', DOB) = date_part('day', CURRENT_DATE)
AND
     DATE_PART('month', DOB) = date_part('month', CURRENT_DATE)
AND
     cast(DOB as time) >= localtime;

, где DOB - это сохраненная дата рождения.

Другое решение, которое будет учитывать високосные годы , а также

SELECT * FROM TABLE_NAME
WHERE
EXTRACT(YEARS FROM age(CURRENT_TIMESTAMP, DOB)) > user_age;

age - это встроенная функция, которая также заботится о leap years, мы можем сохранить user_age пользователя и обновлять при его изменении.

...