我至少在这几个小时内一直在努力解决这个问题,并且非常感谢我对我做错了什么的见解。
我想要比较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);
});
答案 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;
});