2016-05-05 3 views
0

Привет, я пытаюсь удалить первый номер даты. Скажем, сегодня была 15 мая, как бы яgetDate() slice() confusion

  1. удалить первое число и держать 5 только
  2. быть уверены, что что одиночные цифры (Исх 5 июня) остается неизменным? Я попробовал свойство среза, но он, похоже, не работает.

Моей чепуха: https://jsfiddle.net/DimitriXd4/gp2eaaot

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

В теории slice(-1) следует вырезать последний номер и вернуть его, даже если это единственное число/слово, не так ли?

+0

now.getDate() возвращает 5, как это –

+0

увидеть это https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate –

+3

'getDate' возвращает * * number **, который не имеет метода 'slice'. Вы можете либо преобразовать его в строку, либо просто использовать '% 10'. – Bergi

ответ

1

Попробуйте это:

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

https://jsfiddle.net/gp2eaaot/3/

пустая строка сцепленных с результатом, преобразует его в строку, а затем позволяя ломтик работать

+0

Большое спасибо, можете ли вы объяснить, что делает пустая строка в этой ситуации? –

+1

включая описание –

+0

спасибо Nelson. –

1

slice() является метод String, и GetDate () не возвращает строку, поэтому вы не можете позвонить getDate().slice(-1); Вы должны преобразовать ее в String, а затем использовать срез. , например.

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

Но это не изменяет исходную переменную даты, это даст вам только нарезанную строку. Если вы хотите обновить дату, вы должны сделать это вручную.

-1

Другие ответы, похоже, не учитывают однозначные числа, поэтому здесь есть функция, которая проверяет дату перед нарезкой.

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; 
+1

Код слишком сложный – Nayuki

+0

@Nayuki Отредактировано более кратким примером, который, надеюсь, будет полезен? –

2

Там нет необходимости использовать slice(). Как Bergi предположил, что легче оперировать числом, взяв остаток по модулю 10.

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

Этот простой подход использования по модулю предпочтительнее, потому что, когда вы отрезаете строку, есть еще проблемы, которые следует учитывать. Вы должны знать, как долго строка, как работают аргументы start и end, и что означают отрицательные числа.

+0

Я вижу, спасибо за вклад и спасибо за редактирование моего ужасного формата ^.^ –

+1

Добро пожаловать! Хорошего дня – Nayuki