2012-08-30 105 views
2

我有一個腳本用於在某些日期中增加或減少某些天數。JavaScript格式化日期格式

例如,如果我有一個是2012年10月8日的日期,我做+5它應該返回15/08/2012

如果我們在月底它應該返回下個月。

實際上這個腳本似乎很好,但事情是日期格式。它返回的東西就像一個時間戳,我真的不知道如何格式化它,因爲JavaScript對我來說並不是那麼容易我試圖找到像在php date('d-m-y', strtotime($row['date']) 中做的事情但我沒有找到與javascript等價的東西。

首先這裏是我用過的所有日期的代碼。

<?php $jours=d ate('Y-m-d'); $sql="SELECT * FROM agenda WHERE n_doss='" 
.mysql_real_escape_string($_GET[ 'n_doss']). "' AND qualite='".mysql_real_escape_string($_GET[ 
'qualite']). "' AND liasse='".$_GET[ 'liasse']. "'"; $qry=m ysql_query($sql) or 
die(__LINE__.mysql_error().$sql); $i=- 1; // index des enregistrements 
?> 
    <form action="<?php echo (isset($_POST['go'])) ? 'go2.php' : '#'; ?>" 
    method="post"> 
     <input type="hidden" name="liasse" value="<?php echo $_GET['liasse']; ?>" 
     /> 
     <input type="hidden" name="n_doss" value="<?php echo $_GET['n_doss']; ?>" 
     /> 
     <table id="box-table-a"> 
      <tr> 
       <th scope="col"> 
        <input name="data[<?php echo ++$i; ?>][code_s]" type="text" value="CODE S" 
        size="10"> 
       </th> 
       <th scope="col"> 
        <input name="data[<?php echo $i; ?>][libelle]" type="text" value="LIBELLE" 
        size="30"> 
       </th> 
       <th scope="col"> 
        <input name="data[<?php echo $i; ?>][action]" type="text" value="ACTION" 
        size="15"> 
       </th> 
       <th scope="col"> 
        <input name="data[<?php echo $i; ?>][libelle]" type="text" value="DESCRIPTION" 
        size="40"> 
       </th> 
       <th scope="col"> 
        <input type="text" name="data[<?php echo $i; ?>][date]" value="DATE D'ACTION" 
        size="12"> 
       </th> 
       <th scope="col"> 
        <input type="text" name="data[<?php echo $i; ?>][date]" value="VALIDATION" 
        size="12"> 
       </th> 
       <th scope="col"><strong>ETAT</strong> 
       </th> 
      </tr> 
      <?php while($row=m ysql_fetch_assoc($qry)): ?> 
       <tr> 
        <td> 
         <input name="data[<?php echo ++$i; ?>][code_s]" type="text" value="<?php echo $row['code_s'];?>" 
         size="10"> 
        </td> 
        <td> 
         <input name="data[<?php echo $i; ?>][libelle]" type="text" value="<?php echo $row['libelle']; ?>" 
         size="30"> 
        </td> 
        <td> 
         <input name="data[<?php echo $i; ?>][action]" type="text" value="<?php echo $row['action']; ?>" 
         size="15"> 
        </td> 
        <td> 
         <input name="data[<?php echo $i; ?>][libelle]" type="text" value="<?php echo $row['description']; ?>" 
         size="40"> 
        </td> 
        <td> 
         <input type="text" name="data[<?php echo $i; ?>][date]" class="date" id="date<?php echo $i; ?>" 
         value="<?php 


echo date('d-m-Y',strtotime($row['date_action'])) ; 

?>" size="12"> 
        </td> 
        <td nowrap> 
         <input type="text" name="data[<?php echo $i; ?>][date_validation]" id="data[<?php echo $i; ?>][date_validation]" 
         value="<?php if($row['date_validation']=='0000-00-00') {echo 'Non trait&eacute;' ; } 
else { 
echo (date('d-m-Y',strtotime($row['date_validation']))); } 
?>" size="12"> 
        </td> 
        <td nowrap> 
         <?php if($row[ 'date_validation']=='0000-00-00' AND strtotime($row[ 
         'date_action'])>strtotime(date('Y-m-d'))) {?><a href="edit-action.php?id=<?php echo $row['id'] ; ?>&n_doss=<?php echo $row['n_doss'] ; ?>&liasse=<?php echo $_GET['liasse'] ?>&qualite=<?php echo $_GET['qualite'] ?>"><img src="images/gtk-edit.png" width="24" height="24"></a> 
          <a 
          href="validate-action.php?id=<?php echo $row['id'] ; ?>&n_doss=<?php echo $row['n_doss'] ; ?>&liasse=<?php echo $_GET['liasse'] ?>&qualite=<?php echo $_GET['qualite'] ?>"> 
           <img src="images/go.gif" width="24" height="24"> 
           </a> <a href="delete-action.php?id=<?php echo $row['id'] ; ?>&n_doss=<?php echo $row['n_doss'] ; ?>&liasse=<?php echo $_GET['liasse'] ?>" 
           onClick="return confirm('voulez vous vraiment supprimer cette action ?')"><img src="images/trash-paper.png" width="24" height="24"></a> 
           <?php 
           } elseif($row[ 'date_validation']=='0000-00-00' AND strtotime($row[ 
           'date_action'])<=strtotime(date('Y-m-d'))) {?><a href="#" onClick="return confirm('Vous ne pouvez pas &eacute;diter ou changer la date d\'une action appartenant à votre passif !')"><img src="images/gtk-edit.png" width="24" height="24"></a> 
            <a 
            href="validate-action.php?id=<?php echo $row['id'] ; ?>&n_doss=<?php echo $row['n_doss'] ; ?>&liasse=<?php echo $_GET['liasse'] ?>&qualite=<?php echo $_GET['qualite'] ?>"> 
             <img src="images/go.gif" width="24" height="24"> 
             </a> <a href="#" onClick="return confirm('Vous ne pouvez pas supprimer une action appartenant à votre passif !')"><img src="images/trash-paper.png" width="24" height="24"></a> 
             <?php 
             } else { ?> 
              <img src="images/tick_48.png" width="24" height="24"> 
              <?php } ?> 
        </td> 
       </tr> 
       <?php endwhile; ?> 
        </td> 
        </tr> 
     </table> 

這裏是我用於添加天(形式爲減少天數不這樣做,因爲我還沒有遇到一些麻煩與功能添加天的形式。

<table width="50%"> 
    <tr> 
     <td> 
      <div class="info"> <strong>Décalage des date </strong> 

       <table width="150" border="0" cellspacing="0" 
       cellpadding="0"> 
        <tr> 
         <td align="center" bgcolor="#FFFF99"> 
          <input type="image" src="images/minus_remove_green.png" width="22" height="22" 
          name="submit" value="moins" /> 
          <input name="jours" type="text" value="" size="5" id="nb" /> 
          <input type="image" src="images/plus_add_green.png" width="22" height="22" 
          onClick="addday()" /> 
         </td> 
        </tr> 
       </table>Ajouter une action <a href="add-action.php?n_doss=<?php echo $_GET['n_doss'] ; ?>&liasse=<?php echo $_GET['liasse'] ?>&amp;qualite=<?php echo $_GET['qualite'] ; ?>"><img src="images/plus.png" width="24" height="24" border="0"></a> 

      </div> 
     </td> 
    </tr> 
</table> 

最後,我有這個JavaScript的,我已經做了:

<script type="text/javascript"> 
    function addday() { 
     var items = new Array(); 
     var itemCount = document.getElementsByClassName("date"); 

     for (var i = 0; i < itemCount.length; i++) { 
      items[i] = document.getElementById("date" + (i + 1)).value; 
     } 

     for (var i = 0; i < itemCount.length; i++) { 
      items[i] = document.getElementById("date" + (i + 1)).value; 
      var itemDtParts = items[i].split("-"); 
      var itemDt = new Date(itemDtParts[2], itemDtParts[1] - 1, itemDtParts[0]); 
      nb = document.getElementById('nb').value; 


     var newDate = itemDt.getDate() + nb; 
     itemDt.setDate(newDate) ; 
     itemCount[i].value = itemDt; 
     } 

     return items; 
    } 
</script>​ 

的事情是,而不是返回好日期寄回奇怪的事情一樣,

星期一2013年4月29日00:00:00 GMT + 0200(巴黎,馬德里(厄爾D'ETE))

我不知道怎麼回事格式一樣,DD-MM-YYYY

我真的迷失了。我試圖這樣做格式itemCount [i] .value = itemDt.format(「dd-mm-yyyy」);

但它返回的錯誤說date.format是不可接受的數據對象或類似的東西。

回答

2

如果你想返回一個不錯的字符串,你可能會更好做手工定製格式:

  • 使用.getDate()發現當月的一天。
  • 使用.getMonth()查找月份的編號。
  • 使用.getFullYear()找到4位數的年份。
  • 將其全部添加到字符串中。現在

,你宣佈itemDt = new Date(...)這是很好的,但那麼所有你需要做的是這樣的:

itemDt.setDate(itemDt.getDate()+5) 

Date對象會處理月/年本身

您可以使用前面提到的功能像這樣的東西來格式化字符串:

return itemDt.getDate()+"/"+itemDt.getMonth()+"/"+itemDt.getFullYear() // 15/08/2012 

編輯:以上

代碼將返回15/8/2012沒有補零。

return (new Array(2 + 1 - itemDt.getDate().toString().length)).join('0') + itemDt.getDate() + "/" + (new Array(2 + 1 - itemDt.getMonth().toString().length)).join('0') + itemDt.getMonth() + "/" +itemDt.getFullYear(); 
// returns zero padded dates 09/07/2012 
+0

非常感謝您的幫助,它的工作幾乎沒有問題。我認爲我的腳本有問題,但我不知道它是什麼。其實,如果我有以下日期:27-08-2012和我做+1一天它返回我:28-3-2013 ...如果我有一個像06-09-2012的日期我做+1返回我31 -9-2012所有fdates是錯了,我不明白爲什麼 –

+0

我認爲當你創建你的約會對象,你把它分解爲無理由。你.split(「 - 」),它會告訴我您使用的是「 - 」,而不是「/」,它可以更容易,因爲Date對象可以處理看起來像ISO格式:YYYY-MM-DD。如果您要發送新的日期(「2012-08-27」),它將使用較短的代碼。還..確認您的計算機的日期:-) –

+0

它是這樣的,當我做回聲日期(「DM-Y」)30-08-2012 –