【问题标题】:covert date string to dd/mm/yy in javascript在javascript中将日期字符串转换为dd/mm/yy
【发布时间】:2016-11-30 06:26:08
【问题描述】:

我要转换

Tue Jul 12 2016 00:00:00 GMT+0100 (BST)

进入

12/07/2016

假设我有 d = 2016 年 7 月 12 日星期二 00:00:00 GMT+0100 (BST)。我试过了

var a = d.getDate()+"/"+(d.getMonth()+1)+"/"+d.getFullYear();

但后来我得到 12/7/2016 而不是 12/07/2016

我可以的

if(d.getMonth()<10){
    var a = d.getDate()+"/0"+(d.getMonth()+1)+"/"+d.getFullYear();

但我不喜欢这样,而且当一天不到 10 点时,我也会遇到同样的问题。达到我想要的格式的最佳方法是什么。我只需要它作为一个字符串显示在视图中。

【问题讨论】:

标签: javascript date


【解决方案1】:

这个呢

var month = 7; // july (months are base 0)
var day = 12;
var year = 2016;
var d = new Date(year,month-1,day);

var a = pad(d.getDate(),2)+"/"+pad(d.getMonth()+1,2)+"/"+d.getFullYear();
console.log(a)


function pad(num, size) {
    var s = num+"";
    while (s.length < size) s = "0" + s;
    return s;
}

使用来自How to output integers with leading zeros in JavaScript的填充函数

您可能还想选中 http://momentjs.com/ 以“在 JavaScript 中解析、验证、操作和显示日期”。

这是另一个填充函数(我用过很多次)

var month = 7; // july (months are base 0)
var day = 12;
var year = 2016;
var d = new Date(year,month-1,day);

var a = pad(d.getDate(),2)+"/"+pad(d.getMonth()+1,2)+"/"+d.getFullYear();
console.log(a)

/**
 * Returns a zero-padded string of length characters
 * When the number is more than the length, the number is returned 
 * in its full length (longer than the specified length)
 * @param {Number} number The number to be padded
 * @param {Number=2} length
 * @returns {String} the padded String or the number if longer than specified length
 */
function pad(number, length) {
    if (length === undefined) {
        length = 2;
    }
    var missing = length - digits(number);
    if (missing < 0)  return number.toString();
    return Array(missing + 1).join("0") + number.toString();
}

/**
 * Utility function to return the number of digits of a number
 * @param {Number} int the number for which to get the #digits
 * @returns {Number} the number of digits
 */
function digits(int) {
    return Math.floor(Math.log(int) / Math.LN10 + 1);
}

【讨论】:

  • 如果 length 为零怎么办?
  • @RobG fixed ;)(对于想知道发生了什么变化的人:惯用的可选值代码(param = param || default)不起作用0(因为它是假的,还有其他类似@987654327 @ 默认为 true 不能按预期工作)
【解决方案2】:

诀窍是添加一个条件来检查一天或一个月是否小于 10,如果是则添加 0。下面的这个方法是它的简写版本,但它有效。当然,我有一些额外的东西,比如 yyyy、mm 和 dd 的定义,只是为了让事情的来源更清楚一点。但是return 中的部分有什么魔力,您可以将其应用于您的情况。

Date.prototype.yyyymmdd = function() {
  var yyyy = this.getFullYear().toString();
  var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
  var dd  = this.getDate().toString();
  return (mm[1]?mm:"0"+mm[0]) + "/" + (dd[1]?dd:"0"+dd[0]) + "/" + yyyy; // padding
 };
d = new Date();
document.getElementById("date").innerHTML = d.yyyymmdd();
&lt;span id="date"&gt;&lt;/span&gt;

【讨论】:

    【解决方案3】:

    var date = new Date();
    
    var dateFormat = getFormatDate(date);
    var dateOneLiner = getFormattedDateOneLiner(date);
    
    console.log("DateFormat", dateFormat);
    console.log("OneLiner", dateOneLiner);
    
    
    
    
    function getFormatDate(pDate)
    {
      var day = pDate.getDate();
      var month = pDate.getMonth() + 1;
      var year = pDate.getFullYear();
      
      if(month < 10)
      	month = "0" + month;
      
      if(day < 10)
      	day = "0" + day;
        
      return day + "/" + month + "/" + year;
    }
    
    function getFormattedDateOneLiner(pDate)
    {  
      return (pDate.getDate() < 10 ? "0" + pDate.getDate() : pDate.getDate()) + "/" + ((pDate.getMonth() + 1) < 10 ? "0" + (pDate.getMonth() + 1) : (pDate.getMonth() + 1)) + "/" + pDate.getFullYear();
    }

    【讨论】:

    • 拍摄,没有看到您要求以平滑方式执行此操作的部分。好吧,无论如何,这是做到这一点的完整方法。对于那些偶然发现这件事的人。
    • 我想它不会太乱,认为可能已经内置在 java 脚本中
    • 这就是我使用格式的方式,我确实添加了一个衬里。但这有点难以阅读,但它的作用完全相同。
    【解决方案4】:

    有很多方法可以做到这一点。这里有两种可能的单行:

    var a = ("0"+d.getDate()).slice(-2)+"/"+("0"+(d.getMonth()+1)).slice(-2)+"/"+d.getFullYear();
    
    var a = ("0"+d.getDate()+"/0"+(d.getMonth()+1)).replace(/\d(\d\d)/g, '$1')+"/"+d.getFullYear();
    

    【讨论】:

      【解决方案5】:

      你可以像这样使用一行:

          var a = (d.getDate() < 10? "0"+d.getDate():d.getDate())
           +"/"+   (d.getMonth()+1 <10? ("0"+(d.getMonth()+1)):d.getMonth()+1 )
           +"/"+d.getFullYear();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-02
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 2019-07-06
        • 1970-01-01
        • 2019-01-26
        相关资源
        最近更新 更多