2014-02-07 87 views
0

我有兩個日期,即newdate和哈哈。 newdate將是今天的日期(當前日期)哈哈日期可以any.The下面的代碼是不是爲我工作,我已經提供了
newdate:07 - 2月2014 10:04
哈哈:03-二月2014 00:00
它總是來else部分
SDATE:03 - 2月2014
STIME:00:00比較JavaScript中使用時間和日期的日期

var haha=sdate+" "+stime; 
    var newdate=new Date(); 
        var date_str = moment(newdate).format("DD-MMM-YYYY HH:mm"); 
       alert(date_str); 
        if (Date.parse(haha) < Date.parse(date_str)) { 

        alert("Start date cannot be less than today's date"); 

        return false; 

        } 
        else { 

         alert("hahahhahaha"); 
        } 

注意我正在使用lang與javscript的時刻

+0

凡被啓動哈哈? – ltalhouarne

+0

@BelgianMyWaffle檢查我有更新 – user2841408

+0

請不要先添加stime並查看結果是什麼。 – ltalhouarne

回答

0

您的代碼有效。 Stime格式錯誤從第一組00. stime 00:00前刪除冒號。你是如何產生沉悶這是你的問題的原因?

你可以看到我的測試here

var sdate = "03-Feb-2014"; 
var stime = "00:00"; 
var haha = sdate + " " + stime; 
var newdate = new Date(); 

if (navigator.appName.indexOf("Internet Explorer") != -1) { 
    alert("isIE"); 
    var dateObject = (parseISO8601(haha)); 
    var hahaDate = new Date(dateObject.year, dateObject.month, dateObject.day, dateObject.hour, dateObject.min); 
    alert(hahaDate); 
    if (hahaDate.getTime() < newdate.getTime()) { 
     alert("Start date cannot be less than today's date"); 
     return false; 
    } else { 
     alert("hahahhahaha"); 
    } 
} else { 

    var date_str = moment(newdate).format("DD-MMM-YYYY HH:mm"); 
    alert(date_str); 
    if (Date.parse(haha) < Date.parse(date_str)) { 
     alert("Start date cannot be less than today's date"); 
     return false; 
    } else { 
     alert("hahahhahaha"); 
    } 
} 

function parseISO8601(dateStringInRange) { 
    var dateAsObject = {}; 

    var splitTimeFromDate = dateStringInRange.split(" "); 

    var splitTimeValues = splitTimeFromDate[1].split(":"); 

    dateAsObject.hour = splitTimeValues[0]; 
    dateAsObject.min = splitTimeValues[1]; 

    var splitDate = splitTimeFromDate[0].split("-"); 
    dateAsObject.year = splitDate[2]; 
    dateAsObject.day = splitDate[0]; 
    dateAsObject.month = monthToNum(splitDate[1]); 
    return dateAsObject; 

} 

function monthToNum(month) { 
    if (month == "Feb") return 1; 
} 

[編輯:好對不起,我搞砸了與結腸,如果它失敗在別的你確定你的單元測試包括足夠的場景是日既大於和小於當前日期,如果它只是比你的例子少,你永遠不會打其他人的代碼。再次代碼只是工作不知道該說什麼:-(,更新兩種情況下的例子)

[編輯:這裏是一個不完整的例子,你必須記住javascript不是通用的當你問一個關於JS假設我們都使用Chrome或者FF,或者至少在瀏覽器中發佈過疲勞的代碼,我提供了一個簡單的例子來說明如何完成這個任務。坦率地說,我不喜歡外部框架,我可以自己做,所以你可以看到我沒有使用它隨意做你想要的問題是由於IE解析日期時間的方式,你必須使用更通用的格式,如下面提供的格式。可能的格式示例:http://www.w3schools.com/jsref/jsref_obj_date.asp。無論如何GL]

+0

它只是正確的,我只是爲描述添加第一個冒號。實際上,stime是00:00 – user2841408

+1

@ user2841408是sdate和stime生成?其餘的邏輯似乎工作? 你可以添加更多的代碼或打印出結果嗎? – CubanAzcuy

+0

其工作在鉻,但我使用ie8和它不工作在它 – user2841408

0

這有點複雜,請考慮:

var newdate = new Date(); 
var date_str = moment(newdate).format("DD-MMM-YYYY HH:mm"); 
Date.parse(date_str); 

如果上述作品(也絕對不能保證Date.parse將正確地分析在使用所有的瀏覽器串),那麼所有的等價於:

var newdate = new Date(); 
newdate.setSeconds(0, 0); 

你會做更好的手動解析haha​​(或者使用moment.js,因爲你已經有了),並比較結果的日期對象。

考慮:

// s is dd-mmm-yyyy hh:mm 
function stringToDate(s) { 
    s = s.split(/[- :]/); 
    var months = {'jan':0, 'feb':1, 'mar':2, 'apr':3, 'may':4, 'jun': 5, 
       'jul':6, 'aug':7, 'sep':8, 'oct':9, 'nov':10, 'dec':11}; 
    return new Date(s[2], months[s[1].toLowerCase()], s[0], s[3], s[4], 0, 0); 
} 

var newdate = '07-Feb-2014 10:04'; 
var haha = '03-Feb-2014 00:00'; 

alert(stringToDate(newdate).getTime() == stringToDate(haha).getTime()); // false 

// Set to same time 
var newdate = '03-Feb-2014 00:00'; 

alert(stringToDate(newdate).getTime() == stringToDate(haha).getTime()); // true