如何使用Javascript Date对象计算东部时间?

rlcwz9us  于 2023-04-10  发布在  Java
关注(0)|答案(3)|浏览(111)

我正在做一个涉及Javascript的个人项目,作为该项目的一部分,我想获取当前日期(包括时间)并相应地显示它。没什么大不了的,对吧?好吧,* 交易 * 是我想返回 * 东部夏令时 * 的时间和日期,无论IP在世界的哪个地方。
如果这是不可能的,你建议什么替代方法?php有这个功能吗?我可以写一个简单的php脚本,它需要一个日期并转换它,但我想保持在JS中,如果可能的话。
我在想最好的办法,但我很感激你能提供的任何帮助。
谢谢!

tcbh2hod

tcbh2hod1#

我发现了这个on the internet,还有很多这样的脚本:

function calcTime(offset) {

    // create Date object for current location
    d = new Date();

    // convert to msec
    // add local time zone offset 
    // get UTC time in msec
    utc = d.getTime() + (d.getTimezoneOffset() * 60000);

    return new Date(utc + (3600000*offset));

}

所以,你得到了当前时间,加上当前位置的偏移量得到UTC时间,然后你返回一个新的日期,在那里你又加上了某个时区的偏移量。

5jdjgkvh

5jdjgkvh2#

JavaScript原生Date对象只知道两个时区,UTC和用户所在地区的时区(即使这样,您可以提取的有关地区时区的信息量也是有限的)。您可以使用UTC并减去4小时以获得EDT,但您真的总是想要EDT而不是EST吗?
如果你想在PHP中进行任意地区之间的时区转换,你需要拖拽一个带有自己时区信息的大型库,比如TimezoneJS
最好将JavaScript的内容全部保持为UTC格式,让PHP方面为特定的语言环境/时区进行格式化,例如使用来自Date/Time的时区内容。

7kqas0il

7kqas0il3#

检查给定日期是否在复活节天。如果没有给定日期,则使用当前日期。🙂

// If dateObject == null, current Datetime will be used.
// This function uses the "Meeus/Jones/Butcher" algorithm
function isEaster(dateObject) {
  const date = dateObject ?? new Date();
  const year = date.getFullYear();

  // Calculate the date of good friday for the current year
  const a = year % 19;
  const b = Math.floor(year / 100);
  const c = year % 100;
  const d = Math.floor(b / 4);
  const e = b % 4;
  const f = Math.floor((b + 8) / 25);
  const g = Math.floor((b - f + 1) / 3);
  const h = (19 * a + b - d - g + 15) % 30;
  const i = Math.floor(c / 4);
  const k = c % 4;
  const l = (32 + 2 * e + 2 * i - h - k) % 7;
  const m = Math.floor((a + 11 * h + 22 * l) / 451);
  const n = Math.floor((h + l - 7 * m + 114) / 31) - 1;
  const p = (h + l - 7 * m + 114) % 31;

  // Calculate the easter dates
  const maundyThursday = new Date(year, n, p - 1);
  const goodFriday = new Date(year, n, p);
  const holySaturday = new Date(year, n, p + 1);
  const easterSunday = new Date(year, n, p + 2);
  const easterMonday = new Date(year, n, p + 3);

  return ([maundyThursday, goodFriday, holySaturday, easterSunday, easterMonday].map(elem => {
    return elem.toISOString().split('T')[0];
  }).indexOf(date.toISOString().split('T')[0]) > -1);
}

相关问题