【问题标题】:Javascript Uncaught TypeError : .split is not a functionJavascript Uncaught TypeError:.split 不是函数
【发布时间】:2018-09-28 03:31:07
【问题描述】:

我想制作一个用户每天只能领取一次硬币的功能。 我做了函数.split,所以它只比较日期,因为Date()只比较日期和时间。但是,我收到了这个 javascript 错误:

Uncaught TypeError (intermediate value).split 不是函数

有人知道如何解决这个问题吗?我已经尝试了很多方法。错误仍然存​​在。

这是我的代码:

$(document).ready(function () {
  if (new Date(model[0].lastClaimedDate).split(' ')[0] < new Date().split(' ')[0]) {
    document.getElementById('btnAddCoins').disabled = false;
  }
  else {
    document.getElementById('btnAddCoins').disabled = true;
  }   
})

【问题讨论】:

  • split() 方法将字符串对象拆分为字符串数组,方法是将字符串拆分为不在 Date 对象上的子字符串
  • 使用(new Date).getDate()而不是拆分
  • 像这样 (new Date(model[0].lastClaimedDate).getDate()
  • 使用 toDateString() 方法将日期更改为字符串,因此您的代码将变为 new Date(model[0].lastClaimedDate).toDateString().split(' ')[2] &gt; new Date().toDateString().split(' ')[2]

标签: javascript


【解决方案1】:

问题

var date = new Date();

var claimedDate = new Date(date.setDate(date.getDate()-1)) ;
var todaysDate = new Date()


// converting toString and splitting up

claimedDate = claimedDate.toDateString().split(" ");

todaysDate = new Date().toDateString().split(" ");

// result date with array of Day, MonthName, Date and Year

console.log("claimed date", claimedDate)
console.log("todays date", todaysDate)
`var d = new Date();` // Todays date

如果你执行d.split(" ") :: 给你一个错误 d.split is not a function

你可以用d.toDateString().split(" ")分割它 // 给你一个["Fri", "Sep", "28", "2018"]的数组`

使用上面你可以检查上一个日期

您可以检查toDateString method,现在该数组由日、月、日和年组成。因此,您可以检查上一个日期,并且可以禁用或启用该按钮。

更好的解决方案

不用转成String和split,直接查看两个日期即可,查看解决办法

解决方案

$(document).ready(function () {
  var date = new Date();

  var lastClaimedDate = new Date(date.setDate(date.getDate() -  1 )); 
  
  var currentDate = new Date();
  

  if(lastClaimedDate < currentDate){
    $("#btnAddCoins").prop("disabled", true)
  }else{
    $("#btnAddCoins").prop("disabled", false)
  }
  
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btnAddCoins">Add Coins</button>

【讨论】:

  • var d = new Date(); d.toString().split(" ") $(document).ready(function () { if (new Date(model[0].lastClaimedDate).split(' ')[0] &lt; new Date().split(' ')[0]) { document.getElementById('btnAddCoins').disabled = false; } else { document.getElementById('btnAddCoins').disabled = true; } })这样吗?
  • 你可以存储lastClaimedDate和今天日期的变量,通过将它们转换为字符串并拆分,这样每个变量都会有一个由Day、MonthName、Date和Year组成的数组。例如 ["Thu", "Sep", "27", "2018"] 和 ["Fri", "Sep", "28", "2018"] 从这两个数组中,您可以获得所需的信息,因此您可以检查那。我认为这不是一个好的解决方案,我会检查一个更好的方法,但是对于您的问题来拆分日期。首先你需要把它转换成字符串。
  • 如果你能找到,你能把代码贴在这里。非常感谢
  • @IvanaMica toString 需要更新 toDateString ,我使用的是 toDateString 但我已经写了解决方案是 toString。使用示例代码更新了解决方案。请让我知道你是否得到了解决方案
  • 所以我用禁用和启用按钮代码替换了console.log?
【解决方案2】:

您可以将日期强制转换为字符串,然后对其进行拆分:

let strDate = (''+new Date()).split(' ')[0]

console.log( strDate ) 

不过,这对您的问题来说是错误的解决方案。考虑比较日期对象而不是字符串。

let strLastClaimedDate = '01/02/2017 01:30:00'
let dtLastClaimedDate = new Date(strLastClaimedDate)
console.log(formatDate(dtLastClaimedDate))

if ( formatDate(dtLastClaimedDate) < formatDate(new Date('01/02/2017 02:00:00')) )
  console.log('date is older')
else
  console.log('same day (or after)')


function formatDate(dt){
  let month = dt.getMonth()+1
  month = month < 10 ? '0'+month : month
  
  let day = dt.getDate()
  day = day < 10 ? '0'+day : day

  return [dt.getFullYear(),month,day].join('')
}

【讨论】:

  • @IvanaMica if 语句并没有真正改变,控制台会演示它们何时被触发,以便您可以使用值 01/02/2017 来查看这是否是您所期望的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 2020-04-29
  • 2019-11-06
  • 2017-09-18
  • 2020-06-05
  • 1970-01-01
  • 2017-06-24
相关资源
最近更新 更多