【问题标题】:Convert string into date and compare to curent date将字符串转换为日期并与当前日期进行比较
【发布时间】:2014-02-20 12:58:57
【问题描述】:

我是 JavaScript 新手。 我正在尝试将字符串中的日期与当前的 javascript 日期进行比较。

function testDate() {
    var theTestDate = "21:36:40 30/02/2014";

    var xxx = new Date();

    var theTestDateNow = xxx.getHours() + ':' + xxx.getMinutes() + ':' + xxx.getSeconds() + ' ' + xxx.getDate() + '/' + (xxx.getMonth()+1) + '/' + xxx.getFullYear();
    if (theTestDateNow < theTestDate) {
        alert("New");
    }   else {
            alert ("old");
        }
}
testDate();

我尝试将当前日期格式化为该字符串格式,但现在我认为需要格式化该字符串,以便 javascript 可以知道它是一个日期;我不知道怎么做。

【问题讨论】:

  • 希望这不是一个玩笑 .. 2014 年 2 月 30 日不是一个有效的日期,解析后它会给出类似 2014 年 3 月 2 日的信息。

标签: javascript date format


【解决方案1】:

将测试日期转换为 Date 对象会更容易 (有几种方法可以做到)并比较它们:

function testDate() {
    var theTestDate = "21:36:40 30/02/2014";
    var testDateObject = Date(Date.parse(theTestDate ));
    var now= new Date();


    if (testDateObject > now) {
        alert("New");
    } else {
        alert ("old");
    }
}
testDate();

Date.parse() 适用于格式良好的日期字符串
Date() 标准构造函数:Date(year, month-1, day, hours, minutes, seconds, milliseconds)

编辑:通过进一步研究,迄今为止解析字符串的最佳方法是使用自定义函数并使其适应您的特定情况:

function parseDate(str) {
    var parts = str.match(/\d+/g); //extract group of digits
    return new Date(parts[5],parts[4]-1,parts[3],parts[0],parts[1],parts[2]);

}
var my_date = parseDate('21:36:40 15/02/2014');
var now= new Date();
alert( (my_date > now) ? 'New':'Old');

【讨论】:

  • 你测试过这个吗? testDateObject 不是 theTestDate 预期的日期。
【解决方案2】:

您可以使用正则表达式提取您想要的所有日期信息:

var theTestDate = "21:36:40 30/02/2014";

var data = theTestDate.match(/(\d{1,2}):(\d{1,2}):(\d{1,2})\s+(\d{1,2})\/(\d{1,2})\/(\d{1,4})/);
// OR: if you are certain that your date always contains 2 digits for hours, 4 digits for year, ...
var data = theTestDate.match(/(\d{2}):(\d{2}):(\d{2})\s+(\d{2})\/(\d{2})\/(\d{4})/);

var date = new Date(
    data[6], // year
    data[5] - 1, // month, 0 based index
    data[4], // day
    data[1], // hours
    data[2], // minutes
    data[3] // seconds
);

基本上, (\d{1,2}) 将匹配 1 位或 2 位数字,并且总正则表达式将匹配您的日期格式的字符串。在此处阅读有关正则表达式的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

【讨论】:

    【解决方案3】:

    您可以使用moment.js 并这样做:

    if (moment(theTestDate, 'MM/DD/YYYY') > moment(curdate))
    

    或者,如果您使用的是 Date.js 库,那么您可以这样尝试:

    if (Date.parse(theTestDate) > Date.parse(curdate))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2019-04-20
      • 2018-07-22
      • 1970-01-01
      • 2011-12-18
      相关资源
      最近更新 更多