2 回答

TA贡献1871条经验 获得超13个赞
如果 end_date是 UTC,你可以这样做:
const endDate = new Date(obj.end_date + "Z");
const inThePast = endDate < date;
Z说UTC 。
如果是当地时间(是的,即使只有日期也很重要),最好的办法是解析它并从部分构建它:
const [year, month, day] = obj.end_date.split("-");
const endDate = new Date(+year, month - 1, +day); // Local time
const inThePast = endDate < date;
如果没有时区指示器,规范说它应该被解析为 UTC,因此如上所述创建它。但是,这在规范中有所不同,实现也随之变化。ES5 表示所有没有时区指示符的字符串都应该被解析为 UTC,这与 ISO-8601 不兼容;ES2015 则相反,结果与很多现有代码不兼容;ES2016及更高版本将UTC 用于仅日期形式,将本地时间用于日期/时间形式)。截至 2018 年底,我在这里的回答是,对于相当现代的浏览器,仅日期形式应该可靠地解析为 UTC 跨浏览器。但是,如果您想要本地化,则必须做其他事情。
Non-standard,您也可以将其重新排列为美国日期格式MM/DD/YYYY(使用/, not -),并且我尝试过的每个浏览器都会将其解析为本地时间。但如果你要这样做,你也可以使用如上所示的构造函数来明确指定部分。

TA贡献1872条经验 获得超3个赞
如果您不需要检查时区,这应该足够了:
const endDate = new Date(obj.end_date);
const isPast = endDate < date
添加回答
举报