getDate() slice() confusion

getDate() slice() confusion

本文关键字:confusion slice getDate      更新时间:2023-09-26

你好,我正在尝试删除日期的第一个数字。假设今天是5月15日,我将如何

  1. 去掉第一个整数,只保留5
  2. 确保个位数(6月5日前)保持不变?我尝试了slice属性,但似乎不起作用

我的技巧:https://jsfiddle.net/DimitriXd4/gp2eaaot

var now = new Date();
var getTheDate = now.getDate().slice(-1);
console.log(getTheDate );

理论上,slice(-1)应该剪切最后一个数字并返回它,即使它是单个数字/单词,对吧?

slice()是String方法,getDate()不返回String,这就是为什么不能调用getDate().slice(-1);您必须将其转换为字符串,然后使用slice。例如

var getTheDate = now.getDate().toString().slice(-1);

但它不会更改原始日期变量,只会给您一个切片字符串。如果你想更新日期,你应该手动更新。

不需要使用slice()。正如Bergi所建议的,通过取余数模10来运算这个数字更容易。

var dateRightDigit = (new Date().getDate() % 10) + "";
console.log(dateRightDigit);  // "0" or "1" or ... or "9"

这种使用模的更简单的方法更可取,因为当您对字符串进行切片时,需要考虑更多的问题。您必须知道字符串有多长,startend参数是如何工作的,以及负数的含义。

试试这个:

var now = new Date();
    var getTheDate = (now.getDate() + "").slice(-1);
    console.log(getTheDate );

空字符串与结果连接,将其转换为字符串,然后允许切片在中工作

其他答案似乎不考虑个位数,所以这里有一个函数可以在切片前检查日期。

var sliceDate = function(dateObject){
   var dateToSlice = dateObject.getDate();
   //if the date is a two digit number
   if (dateToSlice > 9) { //NOTE we should not have to worry about the  date being negative
      dateToSlice = dateToSlice.toString().slice(-1); //change to string then slice
   }
   return Number(slicedDate); //convert back to number and return
};
console.log(sliceDate(new Date())); //will print out 5 if May 5th or 6 if May 16th

编辑

这里有一个更简洁的版本:

var getTheDate = new Date().getDate();
var slicedDate = (getTheDate > 9) ? Number(getTheDate.toString().slice(-1)) : getTheDate;