2013-03-18 17 views
13

フォームにdatetime-local htmlコントロールがあり、JSまたはjQuery経由で動的に日付と時刻を設定する必要があります。どうしたらいいですか?jQuery経由でdatetime-localにdatetimeを設定する方法

<input type="datetime-local" id="publishDate" required/> 

私は

$("#publishDate").val("2013-3-18 13:00"); 
$("#publishDate").val("2013-3-18T13:00"); 
$("#publishDate").val(new Date().toLocalString()); 

を試してみましたが、何も働きました。

ありがとうございます。

答えて

13

これは、あなたのサンプルを動作させるために月の2桁の数字を使用する必要がありますトリック

$("#publishDate").val("2013-03-18T13:00"); 

を行うだろう。あなたは現在の日付を設定したい場合は

+0

ありがとうございます。それはうまくいった。 –

+0

ありがとうございますが、これはFirefoxでは機能しません – shiva

9

、その後、あなたはこれを試すことができます。

__Method 1:__ 

$(document).ready(function(){ 
    $('input[type=datetime-local]').val(new Date().toJSON().slice(0,19)); 
}); 

__Method 2:__ 

function zeroPadded(val) { 
    if (val >= 10) 
    return val; 
    else 
    return '0' + val; 
} 

$(document).ready(function(){ 
    d = new Date(); 
    $('input[type=datetime-local]').val(d.getFullYear()+"-"+zeroPadded(d.getMonth() + 1)+"-"+zeroPadded(d.getDate())+"T"+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds()); 
}); 

注:あなたは置き換えることができます$( '入力[タイプ=日時-ローカル]') datetime-localフィールドのIdまたはNameまたはClassです。

EDIT:d.getMonth()は0〜11の間の値を返します。したがって、適切な月を入力するには、結果に1を追加する必要があります。

+0

javascriptの日付のメソッドが先行ゼロなしの値を返すので、動作しません。 http://stackoverflow.com/a/3605248/792624 – jan267

+0

編集されました。試してみてください:) –

+1

**注** 'new Date().JSON()。slice(0,19)'と 'new Date()。toISOString()。slice(0,19)'の両方が返されます。 __local time__ではなく、UTC時。 –

5

私はjQuery method that sets the current UTC timeと書きました。 datetimedatetime-localの入力フィールドを初期化すると便利です。

これを使用してフィールドを初期化する方法は次のとおりです。

$('input[type="datetime"]').setNow(); 

または値なしでのみ設定フィールドへtrueの引数を渡します。

$('input[type="datetime"]').setNow(true); 
+0

jQueryエクステンションがトリックをしました! https://gist.github.com/ryanburnette/8803238 – d1jhoni1b

+0

よろしくお願いします!それは私がそのスニペットをきれいにする必要があることを私に思い出させる。 –

7

var now=new Date(); 
 
console.log(new Date(now.getTime()-now.getTimezoneOffset()*60000).toISOString().substring(0,19));

0

それはまだ適切に指定されていないので、このコンポーネントを台無しにされています。実装も変わっているようです。

これを行う正しい方法は、JSオブジェクトとDOMオブジェクトを渡すことです。このオブジェクトを持たないと意味がありません。文字列を操作することでZalgoが呼び出されます。遅かれ早かれロケールやタイムゾーンで壊れます。

私はこのような何かを探したとChrome 46で発見した:

$('input[type=datetime-local]').prop('valueAsNumber', Math.floor(new Date()/60000) * 60000); // 60seconds * 1000milliseconds 

あなたは、彼らが入力フィールドに表示されます秒とミリ秒を削除しない場合。

不思議な存在valueAsDateプロパティは、同様であるが、:

Uncaught DOMException: Failed to set the 'valueAsDate' property on 'HTMLInputElement': This input element does not support Date values. 

だから、彼らはまだそれを実装し終えたか、そのプロパティの悪い名前を選択していない(それが何かはいえ設定されている場合でも、NULLとして表示されます) 。

関連する問題