jQuery string to Date问题

时间:2014-01-05 05:06:14

标签: javascript jquery html5

我至少在这几个小时内一直在努力解决这个问题,并且非常感谢我对我做错了什么的见解。

我想要比较2个日期对象,并且需要转换我从datetime输入中抓取的一个日期。当我把变量设置为一个新的Date(myVariableHere);它不起作用,但如果我添加等效的字符串new Date(2014-01-05T04:47Z);,它工作正常(看起来似乎)。

我的小提琴:http://jsfiddle.net/centinel3/Y8kWf/

注意:我也尝试使用moment.js,但无法按照我的需要进行操作。

下面的一些代码段并提前感谢您。

        // HTML            
        <input id="start-date" type="datetime"/>            

        // Gets value from start date "datetime selectbox"
        var userStartDate = ""; 
        $("#start-date").change(function () {
            userStartDate = $(this).val();
        });

        var startDate = new Date("2014-01-05T04:47Z"); // works
        var startDate = new Date(userStartDate ); // doesn't work

下面的工作/固定代码(这也会调整格式,使其在Safari中播放效果良好:

        var userStartDate, startDate;
        $("#start-date").change(function () {
            userStartDate = ($(this).val()).replace(/-/g, "/").replace("T", " ");
            startDate = new Date(userStartDate);
        });

3 个答案:

答案 0 :(得分:2)

您需要在事件处理程序中添加使用userStartDate的代码:

    $("#start-date").change(function () {
        startDate = new Date($(this).val());
    });

通过在事件处理程序外设置startDate,当值发生变化时,没有任何反应,startDate只会包含原始值。

如果您希望在用户更改日期时发生某些事情,那么该代码应该放在事件处理程序中,或者从其中调用。

答案 1 :(得分:0)

您需要在“change”事件中定义startDate变量。因为如果你在更改事件之外执行它可能会在定义变量后触发 - 因此它获得未定义的值。

    var userStartDate, startDate; 

    $("#start-date").change(function () {
        userStartDate = $(this).val();
        startDate = new Date(userStartDate);
    });

答案 2 :(得分:0)

只需更新以下行:

var userStartDate = "";
$("#start-date").change(function () {
    userStartDate = $(this).val();
});

var startDate = new Date(userStartDate);

TO:

var userStartDate = "", startDate;

$("#start-date").change(function () {
    userStartDate = $(this).val();
    startDate = new Date(userStartDate); //so each time it gets the updated time;
});