2017-09-22 18 views
-3

基本上我有8个数字组成的简单格式化日期输出这样的日期:Javascript来插入输出数字“/”格式化

<div class="date">20170822</div> 

,并寻找一个简单的JS/jQuery脚本插入“/”第4和第6位后,使其:

<div class="date">2017/08/22</div> 

感谢,感谢所有帮助:)

+1

你尝试过这么远吗?看看[游览]和[问]。 –

+1

你应该显示你试图让我们知道你至少试图研究的代码。你可以在这里做的是使用子字符串。 – schylake

+0

您是否尝试过使用[slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice)方法? – Ammar

回答

-1

/字符需要插入字符集。 JavaScript数组有一个.splice()做这种事情的方法,但字符串不是真正的数组,它们是“数组式”的对象。但是,它们可以非常容易地转换为真正的数组。

MDN

阵列状物体

slice方法也可以叫阵列状物体/ 集合转换成一个新的数组。您只需将该方法绑定到该对象。 函数内部的参数是'类似数组 对象'的示例。

一旦做到这一点,在Array.splice()方法就能解决问题。

var divs = document.querySelectorAll(".date"); // Get all the divs into a node-list (array-like object) 
 

 
// Convert the node list to an array (so Array.forEach can be used) and loop over the array 
 
[].slice.call(divs).forEach(function(d){ 
 
    var sAry = [].slice.call(d.textContent); // Convert the text content of the div to an array 
 

 
    // Insert the/at the index positions 
 
    sAry.splice(4,0,"/"); 
 
    sAry.splice(7, 0, "/"); 
 

 
    d.textContent = sAry.join(""); // Update the div with the formatted value 
 
});
<div class="date">20170822</div> 
 
<div class="date">20170822</div> 
 
<div class="date">20170822</div> 
 
<div class="date">20170822</div> 
 
<div class="date">20170822</div> 
 
<div class="date">20170822</div>

+0

为什么每个人都在寻找复杂的解决方案:简单的'd.innerText.split('')'比'[] .slice.call(d.textContent)'更具可读性'。将字符串转换为数组并返回也不是最简单的代码,当在一行中简单的'substr()'三次也足够时 – smnbbrv

+0

@smnbbrv因为堆栈溢出是知识库。答案应该教育以及回答这个问题。我的代码的编写方式是明确提请注意字符串需要转换的事实。 –

+0

所以现在每个开发人员都会用'+'来代替简单的'substr'来编写这些操作符,并且自称是一个很酷的人 – smnbbrv

0

您可以使用简单的JS这样做


$(document).ready(function(){ 
 
$(".date").each(function(i,elem) { 
 
    var divdate = $(this).html(); 
 
    var lenght = divdate.length; 
 
    var newdate = ''; 
 
    
 
    for(var i = 0;i<lenght;i++){ 
 
     if(i==3){ 
 
     
 
     newdate += divdate[i] +'/'; 
 
     } 
 
     else 
 
     if(i==5){ 
 
      newdate += divdate[i] +'/'; 
 
     } 
 
     else{ 
 
     newdate += divdate[i]; 
 
    } 
 
    } 
 
    $(this).html(newdate);}); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
<div class="date">20170822</div> 
 
<div class="date">20191229</div> 
 
<div class="date">20161025</div> 
 
<div class="date">20150620</div>

+0

适用于斜杠,谢谢。你能否同时支持几个div?我有8个不同的日期在同一页上,它给了我所有人完全相同的输出/日期现在 – Lawyer

+0

@Lawyer完成,查看代码,所有与'''''''''''div'的分区 – M0ns1f

+0

谢谢!完美的作品 – Lawyer

2

您可以使用正则表达式像 "20170822".replace(/^([0-9]{4})([0-9]{2})([0-9]{2})/, "$1/$2/$3");

var els = document.querySelectorAll(".date"); 
 
els.forEach(function(el){ 
 
    var d = el.innerHTML; 
 
    el.innerHTML= d.replace(/^([0-9]{4})([0-9]{2})([0-9]{2})/, "$1/$2/$3"); 
 
    
 
});
<div class="date">20170822</div> 
 
<div class="date">20170102</div> 
 
<div class="date">20170408</div> 
 
<div class="date">20170310</div>

+1

谢谢,很好地工作,但只在第一个div上,我有8个,你可以在同一页面上添加对serveral div的支持吗? – Lawyer

+0

是的!现在编辑示例,querySelector采用第一个节点,使用querySelectorAll:https://codepen.io/cbertelegni/pen/EwgGKb?editors=1111 '''var els = document.querySelectorAll(“。date”); ([0-9] {2})(()()()()() [0-9] {2})/,“$ 1/$ 2/$ 3”); }); ''' – cbertelegni

+0

@Lawyer查看我的更新答案,了解处理所有日期的方法。 –