0

我有startdate和enddate字符串,我正在将字符串转换为date对象

var startdate=开始日期[3]+'-'+月值开始+'-'+开始日期[2]+''+开始时间[0]+':'+启动时间[1]+':00';var enddate=结束日期[3]+'-'+月值结束+'-'+结束日期[2]+''+结束时间[0]+':'+结束时[1]+':00';var s_date=新日期(startdate);var e_date=新日期(enddate);

开始日期和结束日期格式类似于2014-02-20 00:00:00

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

if(s_date>e_date){警报('开始日期不能大于结束日期');}

但有些how-if条件没有执行,即使startdatetime大于enddatetime。

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

解决了的

如果开始日期大于结束日期,我正在使用的程序会在运行时自动更改结束日期。但前端ie datetimepicker文本框没有更新,所以前端enddate仍然小于startdate,但在后台代码中修改了enddate变量和我用来比较日期的变量。。。。对不起打扰你们了。。。。谢谢你帮我。

9
  • 如果未显示警报,则意味着s_date(_date)大于_日期。确保正确创建了日期对象。 评论 2014年2月20日5:03
  • 在问题中,我说“但有些情况下,即使startdatetime大于enddatetime,条件也不会执行” 评论 2014年2月20日5:09
  • 是的,但是>是如此简单的操作只有条件为false的原因是date对象不是您想要的对象,并且s_date(_date)实际上不大于_日期.你怎么知道的s_date(_date)真的更大了吗?你做了吗console.log(s_date.toString(),e_date.toSString())? 除非您提供运行示例,其中s_date(_date)晚于_日期s_date>e_date,我会坚持我的观点。 评论 2014年2月20日5时12分
  • 我已经使用alert检查开始日期和结束日期。对于两个日期相同的bt时间变化仍然没有弹出窗口。开始日期:2014-02-20 00:30:00结束日期:2014-01-20 00:00:00 评论 2014年2月20日5:15
  • 所以你提醒了开始日期,但不是s_date(_date).做什么警报(新日期(开始日期))给你看? 评论 2014年2月20日5:16

5个答案5

重置为默认值
4

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

但你面临的问题是打电话的方式不正确

new Date(dateString);

从这里复制了答案Date(dateString)和new Date(dataString)之间的差异

日期()

使用此函数可以调用名为Date()的函数。它接受格式中的日期“yyyy-mm-dd时:分:秒”

新日期()

通过此操作,您将创建一个新的Date实例。

只能使用以下构造函数:

new Date()//当前日期和时间自1970年1月1日起的新日期(毫秒)//毫秒新日期(日期字符串)新日期(年、月、日、小时、分钟、秒、毫秒)

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

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

1975年10月13日11:13:001975年10月13日11:131975年10月13日
9
  • 这是正确的答案。FWIW、,日期字符串也可以采用以下格式YYY-MM-DDTHH:MM:ss年-月-日 评论 2014年2月20日5:19
  • 感谢@FelixKling改进了答案。我不擅长格式化答案。这样看起来可读性更强:)
    – VJS公司
    评论 2014年2月20日5:23
  • date对象正在转换字符串,如2014年2月13日星期四00:00:00 GMT+0530(印度标准时间),但仍没有弹出窗口 评论 2014年2月20日5:36
  • 实际上,这不是正确的答案。日期('2014-02-20 00:00:00')给我当前的日期/时间。 评论 2014年2月20日5:39
  • 您必须使用逗号,并通过Date.parse传递它。然后给出毫秒。 评论 2014年2月20日5:47
1

下面的代码片段演示了如何使用JavaScript进行数据比较。

var startDate=新日期();startDate.setFullYear(2020年1月20日);var today=新日期();if(startDate>今天){警报(“今天是2020年2月20日之前”);}其他{警报(“今天是2020年2月20日之后”);}
2
  • bt没有时间和日期?如果日期相同,bt时间不同怎么办? 评论 2014年2月20日5:18
  • 您可以使用:var date1=新日期(2013,2,20,7,0,0)var date2=新日期(2013,2,20,7,0,1)if(date2>date1){} 评论 2014年2月20日5:31
0

您可以使用Date对象的getTime()方法。该方法返回自1970年1月1日以来的毫秒数。因此,比较结果如下:

if(s_date.getTime()>e_date.getName()){警报('开始日期不能大于结束日期');}
2
  • 获得时间返回与相同的值的值,当您使用>操作员。所以如果它不能正常工作没有 获得时间,它不会与它一起工作。ecma-international.org/ecma-262/5.1/#sec-15.9.5.8 评论 2014年2月20日5:11
  • 无法工作,因为您没有显示start_date[]和end_date[]是什么,现在我或任何人都可以知道。因此,当您调用Date函数构造函数时,传入的内容可能无效。试试这把小提琴jsfiddle.net/pcq6y。通过将问题分解为较小的部分进行故障排除。 评论 2014年2月20日5:33
0

试试这个:

var sd=新日期(2012年12月12日);var ed=新日期(2014年12月12日);//这种情况意味着结束日期更大,即使比较结果另有说明//无需解析即可工作if(Date.parse(sd)>Date.pparse(ed)){console.log(“开始日期更大”);}其他{console.log('结束日期更大');}

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

  • 为什么你要通过日期对象到日期.parse? 目的日期.parse是要转换更新对象的日期。 评论 2014年2月20日6:04
  • 感谢您的更正,但我使用解析将其转换为毫秒。 评论 2014年2月20日6:09
  • 哦,你说得对,日期.parse确实返回毫秒。但是,当您将日期对象与>,它们将自动转换为毫秒。试试看标准差>标准差自己看看。日期.parse在这里是不必要的,而且与其说是帮助,不如说是困惑。 评论 2014年2月20日6:11
-2
edate=日期解析(e_Date);sdate=日期解析(s_Date);if((日期)<0){警报(“结束日期应大于开始日期。”);回报;}

parse(“Date”)->此函数解析日期字符串,并返回日期字符串和1970年1月1日午夜之间的毫秒数。

使用此函数u可以获得两个日期的时间戳,通过减法u可以确定开始日期是否大于结束日期

2
  • 你也有解释? 在大多数情况下,代码本身并不是很有用。我对你为什么使用(日期)<0,而不是更简单的表达式星期四>星期四. 评论 2014年2月20日5:04
  • 1
    我认为将字符串转换为日期时出现问题。。。请看一下将字符串转换为日期stackoverflow.com/questions/5619202/…
    – amit_183
    评论 2014年2月20日5:14

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.