2017-01-22 7 views
2

Я пытаюсь получить значение типа ввода «месяц» - 2-значный месяц и 2-значный год.Получение неправильного значения типа ввода «Месяц»

ПРОБЛЕМА
Формат правильный, но возвращает неправильную дату.

КОД

$("#cardExpireDate").change(function() { 
 
\t var expireDate = new Date ($(this).val()); 
 
    //var expireDay = expireDate.getDate(); 
 
    var expireMonth = expireDate.getMonth() + 1; 
 
    var expireYear = parseInt(expireDate.getFullYear().toString().substr(2,2), 10); 
 
\t var expireDateMMYY = ([expireMonth, expireYear]).join('/'); 
 
    //alert([expireMonth, expireYear].join('/')); 
 
\t $("#summaryCardExpireDate").val(expireDateMMYY); 
 
});
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700,800); 
 
.container {width:400px; margin:0 auto;} 
 
label {float:left; margin:10px 0; vertical-align:middle; line-height:30px;} 
 
input {width:200px; height:30px; margin:10px; 0; vertical-align:middle; font-family:"Open Sans", sans-serif; font-size:15px; border:0; outline:0;} 
 
#cardExpireDate {border:1px solid #999;} 
 
#summaryCardExpireDate {border:0; border-bottom:1px solid #999;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <div class="formField"> 
 
    <input type="month" id="cardExpireDate" name="card_expire_date" placeholder="Expiration..." title="Card Expire Date" required=""> 
 
    <label class="" for="cardExpireDate">Expiration Date: 
 
    </label> 
 
    <input type="text" id="summaryCardExpireDate"> 
 
    <label class="" for="summaryCardExpireDate">Returned Value: 
 
    </label> 
 
    </div> 
 
</div>

CODEPEN
http://codepen.io/zuhloobie/pen/ggWdLj

Заранее спасибо :)

UPDATE
Это то, что я вижу на Google Chrome: версия 55.0.2883.87 м (64 бит): объект enter image description here

+1

Я не мог понять, в чем проблема? – SaidbakR

+0

Я тоже, формат mm/yy выглядит хорошо, и месяцы соответствуют номерам, которые я мог видеть. – Reisclef

+0

Выбор января 2017 года возвращает «12/16» - должен быть «01/17» – chris

ответ

1

Дата отладки показывает, что дата Sun Jan 01 2017 03:00:00 GMT+0300 (RTZ 2 (зима)). Это прямо в начале месяца. Взгляните на свою локализацию, у вас не должно быть UTC. Я бы исправить проблему, просто добавив 1 день к дате.

var expireDate = new Date ($(this).val()); 
expireDate.setDate(expireDate.getDate() + 1); 

Похоже, вы находитесь в западном полушарии Земли. Это, вероятно, сделать его понятным, почему создание Date объекта настолько разумно: Javascript date object always one day off?

+0

Почему downvote? Устанавливает ли это проблему? –

+0

Я не спускал вниз, но это сработало. Любопытно, почему кто-то отказался от этого? – chris

1

Если вы пошли, чтобы иметь значение месяца в двух цифр, вы должны изменить уаг expireMonth:

из: вар expireMonth = EXPIREDATE. getMonth() + 1;

to: var expireMonth = ('0' + (expireDate.getMonth() + 1)). Slice (-2);

Он отлично работает :)

+0

Не добавляйте несколько ответов, пожалуйста. Если ваш первый неправильный, отредактируйте его или удалите. – DavidG

Смежные вопросы