【问题标题】:javascript how to compare datetimejavascript如何比较日期时间
【发布时间】:2014-03-20 20:20:39
【问题描述】:

我有 startdate 和 enddate 字符串,我将字符串转换为日期对象

var startdate = start_date[3]+'-'+month_value_start+'-'+start_date[2]+' '+start_time[0]+':'+start_time[1]+':00';
var enddate = end_date[3]+'-'+month_value_end+'-'+end_date[2]+' '+end_time[0]+':'+end_time[1]+':00';

var s_date = new Date(startdate);
var e_date = new Date(enddate);

startdate 和 enddate 格式类似于 2014-02-20 00:00:00

我想比较这个日期对象,如果 s_date 大于 e_date 弹出窗口将显示给用户

if(s_date > e_date)
{
alert('Start Date Cannot Be Greater Than End Date');
}

但是即使 startdatetime 大于 enddatetime,如果条件没有执行。

如何解决这个问题有什么建议吗?

已解决

如果开始日期大于结束日期,我正在使用的程序会在运行时自动更改结束日期。但是前端没有更新,即 datetimepicker 文本框,所以前端 enddate 仍然小于 startdate,但在后台代码中修改了 enddate 变量和我用来比较日期的那个变量....抱歉给你们带来了麻烦....谢谢帮助我。

【问题讨论】:

  • 如果未显示警报,则表示s_date大于e_date。确保正确创建日期对象。
  • 在问题中我说“但是即使 startdatetime 大于 enddatetime,如果条件没有执行”
  • 是的,但是> 是一个如此简单的操作,条件为假的唯一原因是日期对象不是您想要的对象有,而s_date 实际上不大于e_date。你怎么知道s_date 真的更大?你做了console.log(s_date.toString(), e_date.toString())吗?除非您提供一个 running 示例,其中s_date 晚于e_date 并且s_date > e_datefalse,否则我会坚持我的意见。
  • 我已经使用警报来检查开始日期和结束日期。因为两个日期相同,bt 时间变化仍然没有弹出窗口。开始日期:2014-02-20 00:30:00 结束日期:2014-02-20 00:00:00
  • 所以你通知了startdate,但没有通知s_datealert(new Date(startdate)) 向您展示了什么?

标签: javascript date


【解决方案1】:

试试这个:

var sd = new Date('12, 12, 2012');
var ed = new Date('12, 12, 2014');

//This condition means the end date is bigger even if the comparison says otherwise
//Can work without Parse
if(Date.parse(sd) > Date.parse(ed)){
    console.log('Start date is bigger');
} else {
    console.log('End date is bigger');
}

在我的示例中,结束日期会更大,因为较早日期的毫秒数总是小于较晚日期。因此,您必须检查开始日期毫秒是否大于结束日期毫秒,以确保开始日期小于结束日期。

【讨论】:

  • 为什么要将Date 对象传递给Date.parseDate.parse 的目的是将字符串转换为日期对象。
  • 感谢您的更正,但我使用 parse 将其转换为毫秒。
  • 哦,你是对的,Date.parse 确实返回毫秒。但是,当您将日期对象与> 进行比较时,它们会自动转换为毫秒。试试sd > ed 自己看看吧。 Date.parse 在这里是不必要的,与其提供帮助,不如说是令人困惑。
【解决方案2】:

所有答案在确定差异时都是正确的。

但你面临的问题是调用方式不正确

 new Date(dateString);

从这里复制答案Difference between Date(dateString) and new Date(dateString)

日期()

这样你就调用了一个名为 Date() 的函数。它接受格式的日期 "yyyy-mm-dd hh:mm:ss"

新日期()

这样你就创建了一个新的 Date 实例。

您只能使用以下构造函数:

new Date() // current date and time
new Date(milliseconds) //milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)

因此,不允许使用 2010-08-17 12:09:36 作为构造函数的参数。

编辑:new Date(dateString) 使用以下格式之一:

"October 13, 1975 11:13:00"
"October 13, 1975 11:13"
"October 13, 1975"

【讨论】:

  • 这是正确的答案。 FWIW,dateString也可以是YYY-MM-DDTHH:mm:ss的格式
  • 感谢@FelixKling 改进了答案。我很不擅长格式化答案。这样看起来更具可读性:)
  • 日期对象正在转换字符串,例如 Thu Feb 13 2014 00:00:00 GMT+0530(印度标准时间),但仍然没有弹出窗口
  • 其实这不是正确的答案。 Date('2014-02-20 00:00:00') 给了我当前的日期/时间。
  • 你必须使用逗号,并通过 Date.parse 传递它。然后它会给出毫秒数。
【解决方案3】:

以下代码 sn-p 演示了如何使用 JavaScript 完成数据比较。

var startDate= new Date();
startDate.setFullYear(2020, 1, 20);
var today= new Date();

if (startDate> today) {
    alert("Today is before 20th Feb 2020");
} else {
   alert("Today is after 20th Feb 2020");
}

【讨论】:

  • bt 没有时间日期?如果日期相同但时间不同怎么办?
  • 您可以使用: var date1 = new Date(2013, 2, 20, 7,0,0) var date2 = new Date(2013, 2, 20, 7,0,1) if( date2>date1) {}
【解决方案4】:

您可以使用 Date 对象的 getTime() 方法。该方法返回自 1970/01/01 以来的毫秒数。所以比较变成:

if(s_date.getTime() > e_date.getTime())
{
    alert('Start Date Cannot Be Greater Than End Date');
}

【讨论】:

  • getTime 返回与valueOf 相同的值,使用> 运算符时会自动调用。所以如果它不能正常工作没有 getTime,它就不能正常工作。 ecma-international.org/ecma-262/5.1/#sec-15.9.5.8
  • 不工作,因为你没有显示你的 start_date[] 和 end_date[] 是什么,现在我或任何人都有办法知道。因此,当您调用 Date 函数构造函数时,您传入的内容可能无效。试试这个小提琴jsfiddle.net/pcq6y。通过将问题分解为更小的部分进行故障排除。
【解决方案5】:
    edate = Date.parse(e_date);
    sdate = Date.parse(s_date);

    if((edate-sdate)<0)
    {

        alert("End date should be greater then start date.");
        return;

    }

Date.parse("date")->这个函数解析一个日期字符串,返回日期字符串和1970年1月1日午夜之间的毫秒数。

使用这个函数你可以得到两个日期的时间戳,通过减法你可以找出开始日期是否大于结束日期

【讨论】:

  • 你也有解释吗?大多数时候,单独的代码并不是很有用。我会特别感兴趣你为什么使用(edate-sdate)&lt;0,而不是更简单的表达sdate &gt; edate
  • 我认为您将字符串转换为日期时存在问题...查看此处以将字符串转换为日期stackoverflow.com/questions/5619202/…
猜你喜欢
  • 2012-01-04
  • 1970-01-01
  • 2014-05-02
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多