我正在寻找一种更好的方法(除了下面的解决方案(来比较EST时区中所有用户(不同国家(的日期。需要您的投入/帮助。
基本上,我必须显示基于三个不同日期的三个UI。到6月,第一个UI必须渲染,6月到7月,第二个UI必须显示,7月3日必须显示。比较时,这些日期应在EST时区。
const JulyDate = new Date("2022-07-01T00:00:00.000-05:00");
const JuneDate = new Date("2022-06-01T00:00:00.000-05:00");
if(new Date().getTime() < JuneDate.getTime()){
renderUIPriorJune= true;
renderUIJune= false;
renderUIJuly= false;
}
else if(new Date().getTime() >= JuneDate.getTime() && new Date().getTime() < JulyDate.getTime()){
renderUIPriorJune= false;
renderUIJune= true;
renderUIJuly= false;
}
else if(new Date().getTime() >= JulyDate.getTime()){
renderUIPriorJune= false;
renderUIJune= false;
renderUIJuly= true;
}
我在EST时区定义了6月和7月的日期,即-5小时作为偏移,然后将当前日期与这些日期进行比较。
你能告诉我这是不是正确的比较方式,或者有更好的方法吗。我对Java脚本相当陌生。
提前谢谢。
getTime()
方法总是返回UTC时区中的毫秒数,这正是比较两个时间戳值所需要的,因为UTC时区没有夏令时。
您的逻辑很好,但更简单的方法是只获取所需时区中的当前月份。通过";EST";我猜你指的是美国东部标准时间,它对应于IANA时区";美国/东方";。
因此,您所需要做的就是找出日期所在的月份,这可以使用toLocaleString和合适的选项来完成,例如
function getEasternMonth(date = new Date()) {
return date.toLocaleString('en',{month: 'numeric', timeZone:'US/Eastern'});
}
console.log('Current month in US EST: ' + getEasternMonth());
let s = '2022-06-01T00:00:00Z';
console.log(s + ' is EST month ' + getEasternMonth(new Date(s)));
现在,您的逻辑被极大地简化为:
let month = getEasternMonth();
if (month < 6) {
// do stuff for pre–June
} else if (month == 6) {
// do stuff for June
} else {
// do stuff for post June
}
请注意,以上所有内容均使用日历月份编号(即6=6月(。
对于任何日期操作或比较,都应该使用库。一个好的是dayjs。
要确定日期是否在6月1日之前,你不必关心时间,只需比较日期即可。Dayjs有一个方法isBefore,它将粒度作为参数之一。如果您将粒度设置为day
,它将比较年、月和日,而不是小时、分钟等。
const now = dayjs();
const isBeforeJune = now.isBefore('2022-06-01', 'month')