【问题标题】:Javascript getDay() returns wrong dayJavascript getDay() 返回错误的日期
【发布时间】:2015-04-25 08:38:24
【问题描述】:

当我制作一个使用日期来确定其字段值的表单时,我遇到了以下问题。在我的表单中,我使用带有一些选项和一个可以输入日期的字段的“选择”输入。 “选择”输入中某个选项的值取决于输入的日期(该值表示价格,周末价格较高)。

起初我使用输入 type="date" 作为日期字段并编写了一个 javascript 函数来获取星期几来确定周末,这很好。但是当我实现 jQuery datepicker 小部件时,输入类型似乎只有在我将其更改为 type="text" 时才有效。从这里开始,getDay() 方法开始返回错误的日期。这导致每当我选择一个日期时,它都会返回错误的价格,因为它没有选择正确的星期几。

我认为问题在于日期读取不正确,因为它作为字符串而不是日期返回,因此返回无效日期。我花了好几个小时寻找解决方案并尝试了几种可能的解决方案,但到目前为止仍然不起作用。

这是用于检查日期的代码部分:

HTML:

<input type="text" id="tukdatum" class="reservinput" value="" name="voorkeursdatum" maxlength="10" onchange="calculateTotal()" />

<select id="activiteit" name="activiteit" onchange="calculateTotal()">
  <option value="bowling" id="bowling">Bowling bij Pins&Pints € 17.50 p.p. (€ 25,- in de weekenden)</option>
</select>

Javascript:

var tuk_activiteiten = new Array();
tuk_activiteiten["bowling"]=17.50;
tuk_activiteiten["bowlingWE"]=25;

function checkDate()
{
    var inputdate = document.getElementById("tukdatum").value;
    var tukdate = new Date(inputdate);
    if (tukdate.getDay() == 6 || tukdate.getDay() == 0)
    {
        document.getElementById("bowling").value = "bowlingWE";
    }
    else {
        document.getElementById("bowling").value = "bowling";
    }
}

日期选择器的jQuery:

$(function(){
  $.datepicker.setDefaults(
    $.extend( $.datepicker.regional[ 'nl' ] )
  );
  $( '#tukdatum' ).datepicker({
      dateFormat: 'dd-mm-yy',
      minDate: '+1',
      showOtherMonths: true,
      selectOtherMonths: true
  });
});

所以基本上我想要它做的是检查日期选择器输入的日期是否在周末(如果为真,则选项值 = 25,否则选项值 = 17.50)。请注意,表格是用荷兰语写的(即 id/类名等)。

【问题讨论】:

  • 它返回什么?最好包含一些实际情况与预期情况的示例。
  • 将整个事情缩小到相关部分也很好。最好使用 sn-p 或小提琴。唯一感兴趣的部分是checkDate 部分和tukdatum 的html,对吗?
  • @DaveNewton 在我使用日期选择器的那一刻,它返回一个无效的日期,这意味着它将值 25 绑定到错误的星期几。它应该将值 25 绑定到周六和周日,而对于一周中的所有其他日子,值 17.50。现在它将值 17.50 绑定到我选择的几乎每个日期,除了某些特定日期(即 2015 年 1 月 3 日星期日,2015 年 5 月 3 日星期四)。
  • @MattBurland 已经这样做了,但是如果代码太多,我会再精简一些。由于我不是 100% 确定错误在哪里,所以我只是发布了与它有关的所有部分。我会试着让小提琴工作。

标签: javascript jquery date datepicker


【解决方案1】:

我不确定您是否使用正确的方法从日期选择器中获取日期。在你的checkDate() 函数中而不是这个

var inputdate = document.getElementById("tukdatum").value;
var tukdate = new Date(inputdate);

你可以使用

var tukdate = $("#tukdatum").datepicker("getDate");

这是因为 getDate 返回一个不需要使用 new Date 解析的日期对象。

这是JSBin - 查看控制台

Documentation here

【讨论】:

  • 似乎对我不起作用,返回“无效日期”。任何想法为什么?
  • @MozillaFox 'Invalid date' 是您分配给var tukdatenew Date 代码的问题。由于 getDate 返回一个Date 对象(在文档中,返回类型在右上角),因此不需要var tukdate = new Date(inputdate);。您可以将其更改为 var tukdate = $("#tukdatum").datepicker("getDate"); 并将 inputdate 全部省略。我已经编辑了我的答案以反映这一点
  • 好吧我试过了,由于某种原因只返回“ [object Object] ”,可能是因为它试图从文本字符串中获取日期?
  • @MozillaFox 哪个部分正在返回对象?查看答案中的 JSBin(打开控制台)。调用 .datepicker("getDate"); 返回一个日期对象,getDay() 可以工作
  • 当我更改代码时,我还添加了另一个输入类型文本,为了检查 var tukdate 会返回什么,我添加了这个:document.getElementById("divObj").value = tukdate;这返回了对象。至于 JSBin,我可以看到它在 devtools 控制台中返回一个日期
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多