如何在 JS(带时区)中检查某人的生日?

How to check if it's somebody's birthday in JS (with time zone)?

早些时候我询问了存储出生日期和通知用户的概念,在查看了一些库后我决定使用 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);

我仍然想念这个概念,因为我被困在检查今天是否是某人生日的部分,而不管我的服务器托管在哪里,假设我 运行 在 0 0 * * * 的 cron 作业,我怎么知道要给哪些人发消息?我接受 postgres 或 JavaScript 解决方案(或组合)

我们可以像这样进行 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 并在它发生变化时更新。