javascript - 比较没有时区的 JavaScript 日期

标签 javascript date

我正在做的事情应该非常简单:我获取一个表示到期日期的字符串,并使用 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/

相关文章:

javascript - 网页如何确定是否/何时查看某些内容?

javascript - Observables "retryWhen"延迟

javascript - OnTextChanged 函数未触发

javascript - 如何在js中保持样本时间与系统时间一致?

javascript - 初始化后可以更改 OpenSeaDragon 平移选项吗

javascript - 无法使用 Jade 模板包含相对路径文件

java - java 中的贷款摊销时间表及时间表日期

显示所有(轻量级)标签创建日期的 git 命令

php - 避免在 strtotime 为 false 时显示 1970-01-01

jquery - 使用表单选择日期jquery