【问题标题】:Compare String to today's date将字符串与今天的日期进行比较
【发布时间】:2015-06-16 21:39:24
【问题描述】:

我有一个格式为“2015 年 6 月 16 日”的日期,我需要将它与今天的日期进行比较,看看它是否更大。

由于我输入的日期是一个字符串,我首先将其转换为日期对象:

new Date("16-Jun-2015");

然后我拿这个和今天的日期比较:

if(date.compare(new Date("16-Jun-2015"), new Date()) > 0){
   //Do stuff if input is larger than today's date
}

new Date("16-Jun-2015") 返回值“无效日期”。如何比较这些日期?我也不能使用任何第三方日期库,因为我不拥有我正在使用的整个代码库。

重复的问题信息不正确,因为该问题只显示解析,而不显示比较。

【问题讨论】:

标签: javascript


【解决方案1】:

由于您提供的格式未标准化,因此不保证Date 构造函数支持。

解决这个问题有多种方法,但最简单的一种是使用诸如moment.js 之类的库,它有自己的解析函数,您可以使用格式说明符进行控制。

例如:

if (moment("16-Jun-2015","D-MMM-YYYY").isAfter())
    ...

请注意,在此示例中,isAfter 函数使用当前日期和时间,因为它没有传递任何参数。

不过,既然你说不能使用库,那就考虑自己做一个简单的解析函数,比如:

var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];

function parseDate(s){
    var parts = s.split("-");
    var d = parts[0];
    var m = months.indexOf(parts[1]);
    var y = parts[2];
    return new Date(y, m, d);
}

你可以像这样简单地调用它:

if (parseDate("16-Jun-2015") > new Date())
    ...

【讨论】:

  • 感谢您提供的信息!不幸的是,我无法在我的应用程序中插入额外的 javascript 库,因为我不拥有它。
  • @user2924127 - 我用不需要库的第二种方法更新了我的答案。
  • 效果很好!非常感谢!
【解决方案2】:

查看 JavaScript 中 Date 对象周围的 the documentation

本质上,您对 new Date('16-Jun-2015') 的使用是无效的,因为 Date 构造函数需要一个非常具体的输入格式。

这意味着您需要将日期格式(“2015 年 6 月 16 日”)转换为兼容格式,ISO-8601RFC2822

将日期格式转换为这些标准之一是不可避免的。使用第三方库(如 Moment.js)可以简化此过程。

【讨论】:

  • 我如何比较今天的日期?
  • 您需要将日期格式转换为 JavaScript 的 Date 对象接受的标准格式。
  • Date.parse() 仍然需要兼容的日期字符串,无论是 ISO-8601 还是 RFC2822。
  • 感谢您提供的信息!不幸的是,我无法在我的应用程序中插入额外的 javascript 库,因为我不拥有它。
猜你喜欢
  • 2015-11-24
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多