如何在 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 并在它发生变化时更新。
早些时候我询问了存储出生日期和通知用户的概念,在查看了一些库后我决定使用 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 并在它发生变化时更新。