我正在做的事情应该非常简单:我获取一个表示到期日期的字符串,并使用 JavaScript 来确定到期日期是否已过。我的方法如下:
var dateStringFromJson = "2015-09-11T11:21:48.113";
var expirationDate = new Date(Date.parse(dateStringFromJson));
if (expirationDate > new Date()) {
// Expiration not up
}
如果我在到期之前的某个时间(例如上午 10:50)执行此函数,则比较将失败,并且该函数将像到期日期已到一样运行。
我确信这个问题与 JavaScript 的时区转换有关。我使用的是 UTC-7,但我的客户可能位于美国的任何时区,因此时区特定的修复在这里不起作用。除非绝对必要,否则我也不希望向项目添加像 moment.js 这样的外部库。
最佳答案
使用函数本地化 json 字符串。当您解析不带时区的日期字符串时,它假定它采用 UTC。看我的answer到一个类似的问题来解释 localizeDateStr()
函数如何工作。
function localizeDateStr(date_to_convert_str) {
var date_to_convert = new Date(date_to_convert_str);
var local_date = new Date();
date_to_convert.setHours(date_to_convert.getHours() + (local_date.getTimezoneOffset() / 60));
return date_to_convert;
}
function checkExpired() {
var dateString = document.getElementById('date').value;
var expirationDate = localizeDateStr(dateString);
if (expirationDate > new Date()) {
alert("Expiration not up.");
} else {
alert("Expired!");
}
}
Expiration Datetime:
<input id="date" type="text" value="2015-09-11T11:21:48.113" />
<button id="btn" onclick="checkExpired()">Is expired?</button>
关于javascript - 比较没有时区的 JavaScript 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32529579/