开发者问题收集

Javascript 未捕获 TypeError:.split 不是一个函数

2018-09-28
62668

我想创建一个函数,让用户每天只能领取一次硬币。 我执行了函数 .split ,以便它只比较日期,因为 Date() 只比较日期和时间。但是,我得到了这个 javascript 错误:

Uncaught TypeError (intermediate value).split is not a function

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

这是我的代码:

$(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;
  }   
})
3个回答

问题

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 不是函数

您可以通过 d.toDateString().split(" ") 来拆分它 // 为您提供一个数组 ["Fri", "Sep", "28", "2018"] `

使用上面的方法,您可以检查前一个日期

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

更好的解决方案

无需将其转换为String并拆分,您可以直接检查两个日期,检查解决方案

$(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>
Learner
2018-09-28

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

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('')
}
Mike
2018-09-28

除了使用 split,您还可以尝试使用扩展运算符。例如 arr.split('') 可以是 [...arr]

pa123
2023-01-11