datetime没有返回正确的值

时间:2017-09-21 10:22:24

标签: javascript

仅使用JS编写一个函数,将格式化为M / D / YYYY的用户输入日期转换为API所需的格式(YYYYMMDD)。参数" userDate"并且返回值是字符串。

例如,它应该转换用户输入的日期" 12/31/2014"到" 20141231"适合API。

我写道:

    function formatDate(userDate) {
  // format from M/D/YYYY to YYYYMMDD
  var myDate = new Date(userDate);

  var day = myDate.getDay(); 
  var month = myDate.getMonth(); 
  var year = myDate.getFullYear();

  var d = day.toString();
  var m = month.toString();
  var y = year.toString();

return y + m + d;
}

console.log(formatDate("12/31/2014"));

但是这回来了:2014113 如果它没有返回' 20141231'

感谢@ gurvinder372 +1,我得到了' 20141231' 但答案是告诉我iv从4中传出0 ...我失败了:

Example case: Wrong answer 
  Two-digit month and day: Wrong answer 
  One-digit day: Wrong answer 
  One-digit month: Wrong answer 

4 个答案:

答案 0 :(得分:1)

Date中的月份从0计算,因此:

myDate.getMonth(); 

将在1月份返回0,依此类推。

此外:

var day = myDate.getDay();

表示,从0开始计算一周中的某一天,因此应将其替换为:

var day = myDate.getDate();

对于一位数值,您需要检查它是否小于10并有条件地将其添加到0。所以最终的形式应该是:

function formatDate(userDate) {
  // format from M/D/YYYY to YYYYMMDD
  var myDate = new Date(userDate);

  var day = myDate.getDate(); 
  var month = myDate.getMonth() + 1; 
  var year = myDate.getFullYear();

  var d = +day.toString() < 10 ? '0' + day.toString() : day.toString();
  var m = +month.toString() < 10 ? '0' + month.toString() : month.toString();
  var y = year.toString(); // no need for check one-digit values

return y + m + d;
}

答案 1 :(得分:0)

  

但这是回归:2014113如果它不返回'20141231'

月份从0

开始

替换

var month = myDate.getMonth(); 

var month = myDate.getMonth() + 1; 

如果您还需要处理单位数填充,那么也可以这样做

function padToTwoChar( value )
{
   return ( "0" + value ).slice(-2);
}

并且您的退货声明将变为

return padToTwoChar( y ) + padToTwoChar( m ) + padToTwoChar( d );

答案 2 :(得分:0)

希望这有助于你

&#13;
&#13;
function formatDate(userDate) {
    var myDate = new Date(userDate);

    var day = myDate.getDate();
    var month = myDate.getMonth() + 1; // +1 as month starts with o
    var year = myDate.getFullYear();

    var d = (day <= 9) ? '0' + day : day.toString(); // append 0 for single digit
    var m = (month <= 9) ? '0' + month : month.toString(); // append 0 for single digit
    var y = year.toString();

    return y + m + d;
}

console.log(formatDate("1/1/2014"));
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您甚至可以摆脱使用PHAuthorizationStatusNotDetermined构造函数。除非您使用ISO-8601 format,否则通常不建议使用日期构造函数进行解析,因为其他格式的浏览器的实现方式不同。

以下是仅使用字符串split()函数的示例。

如果您想要对单个数字进行零填充,请使用PHAuthorizationStatusDenied函数,将Date格式设置为pad()

1