2015-05-11 24 views
5

我想用當前日期和時間設置datetime-local輸入的值。現在我有一個醜陋的解決方案,涉及切割前17個字符。另外它以GMT而不是當地時間來設定時間。我的代碼如下:datetime-local的設置值從日期

<input type="datetime-local" name="name" id="1234"> 

<script type="text/javascript"> 
    var d = new Date(); 
    var elem = document.getElementById("1234"); 
    elem.value = d.toISOString().slice(0,16); 
</script> 

我有兩個問題與此代碼:

  1. 有沒有辦法從Date轉換爲合法的值,而無需手動切片串?
  2. 我想要在datetime-local中顯示的字符串爲DD/MM/YYYY, hh:mm(例如:05/11/2015, 14:10它是GMT中的13:10,但我在GMT + 1中,所以我想顯示14:10)。目前顯示的是05/11/2015, 01:10 PM。我想刪除PM並在當地時間顯示。

這可能是一個XY problem,所以如果我這樣做完全錯誤的,有一個更好的方式來顯示HTML日期時間採摘,我會很樂意聽到的。

回答

1

toISOString函數負責將當地日期(new Date)轉換爲GMT。

如果你不想使用GMT然後切片,您需要使用純日期構造函數和所有的getX功能,其中X是(日,月,年...)

另外,則需要使用一個函數來擴展Number對象,該函數將幫助您返回01而不是1,例如,以保留dd/mm/yyyy, hh/mm格式。

讓我把這個函數原型AddZero

 <input type="datetime-local" name="name" id="1234"> 

    <script type="text/javascript"> 
     Number.prototype.AddZero= function(b,c){ 
     var l= (String(b|| 10).length - String(this).length)+1; 
     return l> 0? new Array(l).join(c|| '0')+this : this; 
    }//to add zero to less than 10, 


     var d = new Date(), 
     localDateTime= [(d.getMonth()+1).AddZero(), 
       d.getDate().AddZero(), 
       d.getFullYear()].join('/') +', ' + 
       [d.getHours().AddZero(), 
       d.getMinutes().AddZero()].join(':'); 
     var elem=document.getElementById("1234"); 
     elem.value = localDateTime; 
    </script> 

See this

+0

感謝您的回答。這會將正確的時間打印爲字符串(05/11/2015,14:36:30),但不能用作日期時間本地值 –

+0

我在http://www.w3schools.com上運行我的代碼/htmL/tryit.asp?filename=tryhtml_input_datetime-local。如果你複製粘貼你的代碼,你會看到它不能正確顯示。 –

+0

酷! datetime-local是什麼意思?除非我錯了,否則當安裝運行瀏覽器時,本地日期時間是操作系統的日期和時間。 – Bellash

0

elem.value = d.toLocaleString(); 

該W替換該行

elem.value = d.toISOString().slice(0,16); 

儘管如此,病人仍然在最後打印「上午/下午」,但它會照顧到當地價值的時間調整。