[已解决问题] 奇怪的问题
提问时间: 2008-01-08 17:52
浏览:378 次

 页面中有两个文本框控件,ID分别为txtFrom和txtTo。分别在两个框中输入两个日期:2008-01-08和2007-01-07,调用下面的脚本代码。

 

function CheckFromToControl(id)
{
    // 取得开始控件
    var from = document.all(id);
   
    // 取得截至控件
    var to = document.all(id.replace("txtFrom", "txtTo"));
    var fromVal = from.value;
    var toVal = to.value;
    if (ChkNull(fromVal) && ChkNull(toVal))
    {
        var fromDate = new Date(fromVal);
        var toDate = new Date(toVal);
        if (fromDate > toDate)
        {
            to.style.backgroundColor = "#FF0000";
            alert("起始时间不能大于终止时间!");
            to.focus();
            return false;
        }
        alert(fromDate != toDate);
        alert(fromDate == toDate);
        alert(fromDate > toDate);
        alert(fromDate < toDate);
    }
    to.style.backgroundColor = "#FFFFFF";
    return true;
}

 

分别弹出的四个框的文本分别是:

true

false

false

false

 

对应代码:

alert(fromDate != toDate);
        alert(fromDate == toDate);
        alert(fromDate > toDate);
        alert(fromDate < toDate);

真实怪事,难道fromDate不等于toDate,fromDate不大于toDate,fromDate不小于toDate。那么fromDate和toDate是什么样的路基关系?

 



问题补充:修改一下javascript:
function CheckFromToControl(id)
{
// 取得开始控件
var from = document.all("txtFrom",);

// 取得截至控件
var to = document.all("txtTo");
var fromVal = from.value;
var toVal = to.value;
var fromDate = new Date(fromVal);
var toDate = new Date(toVal);
if (fromDate > toDate)
{
to.style.backgroundColor = "#FF0000";
alert("起始时间不能大于终止时间!");
to.focus();
return false;
}
alert(fromDate != toDate);
alert(fromDate == toDate);
alert(fromDate > toDate);
alert(fromDate < toDate);

to.style.backgroundColor = "#FFFFFF";
return true;
}

最佳答案
问题出在JS把字符串转换成日期的格式要求上:
你把输入的字符改成  2008/01/02  或 01-02-08 都能成功转换成日期对象。但01-02-08这种短格式会出现千年虫问题。

Date.parse(dateVal)
其中必选项 dateVal 是一个包含以诸如 "Jan 5, 1996 08:47:00" 的格式表示的日期的字符串,或者是一个从 ActiveX® 对象或其他对象中获取的 VT_DATE 值。

说明
parse 方法返回一个整数值,这个整数表示 dateVal 中所包含的日期与 1970 年 1 月 1 日午夜之间相间隔的毫秒数。

parse 方法是 Date 对象的一个静态方法。正因为它是一个静态方法,它是通过下面例子中所示的方法被调用的,而不是作为一个已创建 Date 对象的一个方法被调用。

var datestring = "November 1, 1997 10:15 AM";
Date.parse(datestring)
下面这些规则决定了 parse 方法能够成功地解析那些字符串: 

短日期可以使用“/”或“-”作为日期分隔符,但是必须用月/日/年的格式来表示,例如"7/20/96"。 
以 "July 10 1995" 形式表示的长日期中的年、月、日可以按任何顺序排列,年份值可以用 2 位数字表示也可以用 4 位数字表示。如果使用 2 位数字来表示年份,那么该年份必须大于或等于 70。 
括号中的任何文本都被视为注释。这些括号可以嵌套使用。 
逗号和空格被视为分隔符。允许使用多个分隔符。 
月和日的名称必须具有两个或两个以上的字符。如果两个字符所组成的名称不是独一无二的,那么该名称就被解析成最后一个符合条件的月或日。例如,"Ju" 被解释为七月而不是六月。 
在所提供的日期中,如果所指定的星期几的值与按照该日期中剩余部分所确定的星期几的值不符合,那么该指定值就会被忽略。例如,尽管 1996 年 11 月 9 日实际上是星期五,"Tuesday November 9 1996" 也还是可以被接受并进行解析的。但是结果 Date 对象中包含的是 "Friday November 9 1996"。 
JScript 处理所有的标准时区,以及全球标准时间 (UTC) 和格林威治标准时间 (GMT)。 
小时、分钟、和秒钟之间用冒号分隔,尽管不是这三项都需要指明。"10:"、"10:11"、和 "10:11:12" 都是有效的。 
如果使用 24 小时计时的时钟,那么为中午 12 点之后的时间指定 "PM" 是错误的。例如 "23:15 PM" 就是错误的。 
包含无效日期的字符串是错误的。例如,一个包含有两个年份或两个月份的字符串就是错误的。 
1/10/2008 4:50:15 AM 回答者:AndyDavis
评论
4个月前   逆水行船 :
谢谢
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除