入力タイプの日付のデフォルト値を今日に設定するにはどうすればよいですか?


403

HTML5入力タイプは素晴らしいです。Operaの新しい組み込み日付ピッカーは簡単です。Chromeは少なくともスピンホイール実装で新しい入力タイプをサポートしています。

しかし、日付フィールドのデフォルト値を今日の日付に設定する方法はありますか?Operaでは、日付ピッカーから「今日」を選択でき、Chromeのいずれかのステップボタンをクリックするとすぐに、今日の日付から増減します。

私はこのマイナーな問題の解決策をコーディングするのを恥ずかしがり屋ではありませんが、両方のブラウザーが現在の日付を完全に認識しているが、自動的に(少なくともプレースホルダーとして)ポップインしないだけであることは私にはばかげているようです。



これは参考になっうかもしれstackoverflow.com/questions/14212527/...
ムーサ


4
var date = new Date(); //日付オブジェクトを作成しますvar min_date = date.toISOString()。slice(0,10); ////現在の日付の特定の部「2018年2月2日」を取得
GünayGültekin

<input type = "date" value = "YYYY-MM-DD" />
ボリスデトライ

回答:


288

他のHTML入力フィールドと同様に、デフォルト値がvalue属性で指定されていない限り、ブラウザは空のままにします。

残念ながら、HTML5はvalue属性に「今日」を指定する方法を提供せず(私が見ることができます)、RFC3339の有効な日付のみを提供します2011-09-29

TL; DRYYYY-MM-DD日付形式を使用しないと表示されません


50
.netユーザーの場合:DateTime.Today.ToString( "yyyy-MM-dd")
dvdmn

3
月と日の前の「0」が必要であることに注意してください。「2011-09-29」は機能し、「2011-9-29」は機能しません。
nico

2
ルビー:(また)DateTime.now.strftime("%Y-%m-%d")
アダム・グラント

43
@MartinBarkerはdate('Y-m-d')、先行ゼロを必要とするのではないでしょうか?
SGR 2016

15
JavaScriptの場合:myDate.toLocaleDateString('en-CA')トリックを実行します
Ulysse BN

218

JavaScriptのDateオブジェクトは、必要なフォーマットを手動で行うのを避けるために十分な組み込みサポートを提供します。

正しいタイムゾーンサポートのためにこれを追加します。

Date.prototype.toDateInputValue = (function() {
    var local = new Date(this);
    local.setMinutes(this.getMinutes() - this.getTimezoneOffset());
    return local.toJSON().slice(0,10);
});


jQuery:

$(document).ready( function() {
    $('#datePicker').val(new Date().toDateInputValue());
});​


純粋なJS:

document.getElementById('datePicker').value = new Date().toDateInputValue();

1
モバイルをサポートしているかどうかに注意してください。Android 4.0.3(少なくとも)で、ポップアップ日付コントロールを介して選択された新しい日付が今日の日付に置き換えられるのではなく、追加されるという問題がありました。たとえば、2013-03-25ではなく2013-03-252013-03-27になる可能性があり、ユーザーが変更する方法はありません。
ベンクレイトン

1
@Web_Designer結構です。local.setMinutes(this.getMinutes() - this.getTimezoneOffset());次に、(その答えが最終的に到達するように)最初に調整する必要があります。
brianary 2013

1
これはvalue プロパティのみを設定し、属性は設定しないため、フォームがリセットされると、デフォルトで値が設定されません。また、とにかくtoJSONが呼び出すtoISOStringを使用する方がはるかに明確になります。
RobG、2015

1
@apraetor実際には、日付の入力をサポートするブラウザーのみがサポートされているためvalueAsDate(IE、Firefox、おそらくSafari、基本的にはChrome、Opera、Edge以外のすべてのモバイルブラウザーなど)、それは逆です。すべてがvalue私のソリューションが使用するプロパティをサポートしています。サポートされていないブラウザーで日付入力がテキスト入力にフォールバックした場合でも、他のソリューションはエラーになるか失敗します。
ブライナリー

2
この回答は、a input[type=datetime-local]を使用してslice(0,19)HTHに変更することで機能しました
jcruz

189

これは私にとってはうまくいきます:

document.getElementById('datePicker').valueAsDate = new Date();

https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement


1
すべてのブラウザで機能していますか?とモバイル版も?テスト済み?
Usman Younas 2015

2
@UsmanYこれはHTML5仕様の一部であるため、HTML5入力タイプをサポートするものはすべてサポートする必要がありvalueAsDateます。html.spec.whatwg.org/multipage/forms.html#dom-input-valueasdate
wersimmon

@harbichidian日付入力のプロポーザルは、valueAsDateのプロポーザルよりも少し前の日付です。そのプロパティのブラウザサポートへのリンクはありますか?
ブライアリー2016年

3
日付はUTC時間に変換されます。2018-03-27の-0600の午後6時に、をに設定しvalueAsDatenew Date()場合、フィールドの値は2018-03-28に設定されます。austinfrance.wordpress.com/2012/07/09/…を
Aupajo

1
@Aupajoが言ったように、UTC時間を必要としない場合、これは間違った日付を設定します。
ADJenks

81

次のコードはうまくいきます:

<input type="date" value="<?php echo date('Y-m-d'); ?>" />

これはPHPに依存していることに注意してください。


64
あなたの答えは完全にphpに依存しています。
Yëco

1
お問い合わせフォームがPHPページ(WordPressページやショートコードなど)にある場合、これは完全に機能します。イシャム、ありがとう!
tristanojbacon

5
次のように変更<?php echo date('Y-m-d', strtotime(date('Y/m/d'))); ?>すると、冗長性を減らすことができます <?php echo date('Y-m-d'); ?>
Murray Smith

7
これにより、HTMLドキュメントの作成日(サーバー内、サーバーのタイムゾーン内)に従って日付が設定されます。フィールドに実際に入力する時点では、現在の日付と一致する必要はありません。クライアント側のJavaScriptは、ユーザー側に依存することを行う必要がある場合に適しています。
Jukka K. Korpela、2013年

1
短いタグ<?= date( 'Ym-d');を使用することもできます。?>。「エコー」を1つ少なく
sashok_bg

36

次のように、javascriptを使用してデフォルト値を入力できます:http : //jsfiddle.net/7LXPq/

$(document).ready( function() {
    var now = new Date();
    var month = (now.getMonth() + 1);               
    var day = now.getDate();
    if (month < 10) 
        month = "0" + month;
    if (day < 10) 
        day = "0" + day;
    var today = now.getFullYear() + '-' + month + '-' + day;
    $('#datePicker').val(today);
});

私はおそらく、月と日付が1桁かどうかを確認し、それらの前にゼロを追加するために少し余分な時間をかけるでしょう...しかし、これはあなたにアイデアを与えるはずです。

編集:余分なゼロのチェックを追加しました


Opera(Opera 12 / Windowsでテスト済み)では、月と日の先頭にゼロを付けないとこれは機能しません。
Renato

31

PHPを使用している場合は、標準のYmd形式に従います

<input type="date" value="<?php echo date("Y-m-d"); ?>">

2
この回答は、phpを使用している場合に機能することを言及する必要があります。これはすべての人に当てはまるわけではありません。
Motassem MK 2016

24

HTML

<input type="date" id="theDate">

JS

$(document).ready(function() {
    var date = new Date();

    var day = date.getDate();
    var month = date.getMonth() + 1;
    var year = date.getFullYear();

    if (month < 10) month = "0" + month;
    if (day < 10) day = "0" + day;

    var today = year + "-" + month + "-" + day;       
    $("#theDate").attr("value", today);
});

デモ

jQueryを使いたくない場合は、次のようなことができます

HTML

<input type="date" id="theDate">

JS

var date = new Date();

var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();

if (month < 10) month = "0" + month;
if (day < 10) day = "0" + day;

var today = year + "-" + month + "-" + day;       
document.getElementById("theDate").value = today;

デモ


22

HTML5自体では、日付フィールドのデフォルト値を今日の日付に設定する方法はありませんか?他の回答に示されているように、値はJavaScriptを使用して設定できます。これは通常、ページが読み込まれたときにユーザーに現在の日付に基づいてデフォルトを設定する場合に最適なアプローチです。

HTML5は要素のvalueAsDateプロパティを定義しinput type=date、それを使用して、などによって作成されたオブジェクトから直接初期値を設定できますnew Date()。ただし、たとえばIE 10はそのプロパティを認識していません。(またinput type=date、への本物のサポートが不足していますが、それは別の問題です。)

したがって、実際にはvalueプロパティを設定する必要があり、それはISO 8601に準拠した表記である必要があります。現在使用されているブラウザがtoISOStringメソッドをサポートすることを期待できるため、現在ではこれはかなり簡単に行うことができます。

<input type=date id=e>
<script>
document.getElementById('e').value = new Date().toISOString().substring(0, 10);
</script>

6
または、Y10K準拠にしたい場合:= new Date().toISOString().split('T')[0];
Blazemonger '30年

1
toISOStringはUTCの日付と時刻を返すため、ユーザーのタイムゾーンの正しい日付が表示されない場合があります。たとえば、ユーザーがUTC + 0800の場合、真夜中から08:00までは、昨日の日付を取得します。
RobG

18

ブラウザで日付と時刻に関連することを行っている場合は、Moment.jsを使用します

moment().format('YYYY-MM-DD');

moment()現在の日付と時刻を表すオブジェクトを返します。次に、その.format()メソッドを呼び出して、指定された形式に従って文字列表現を取得します。この場合は、YYYY-MM-DD

完全な例:

<input id="today" type="date">
<script>
document.getElementById('today').value = moment().format('YYYY-MM-DD');
</script>

すでにmoment()を利用できる場合、またはWebアプリでさらに多くの日付作業を行う予定の場合、このソリューションは簡単です。モーメントは非常に多くの問題を解決します。
secretwep

10

moment.jsを使用してこの問題を2行で解決します。html5の日付入力タイプは、この形式「YYYY-MM-DD」のみを受け入れます。私はこの方法で問題を解決します。

var today = moment().format('YYYY-MM-DD');
 $('#datePicker').val(today);

これは、この問題を解決する最も簡単な方法です。


8

Javascript

document.getElementById('date-field').value = new Date().toISOString().slice(0, 10);

jquery

$('#date-field').val(new Date().toISOString().slice(0, 10));

別のオプション

日付、月、年をカスタマイズしたい場合は、希望どおりにsumまたはsubを実行してください。

function today() {
        let d = new Date();
        let currDate = d.getDate();
        let currMonth = d.getMonth()+1;
        let currYear = d.getFullYear();
        return currYear + "-" + ((currMonth<10) ? '0'+currMonth : currMonth )+ "-" + ((currDate<10) ? '0'+currDate : currDate );
    }

今日機能を適用する

document.getElementById('date-field').value = today();

$('#date-field').val(today());

7

非常にシンプルで、PHP、ASP、JAVAなどのサーバー側の言語を使用するか、JavaScriptを使用することもできます。

これが解決策です

<?php
  $timezone = "Asia/Colombo";
  date_default_timezone_set($timezone);
  $today = date("Y-m-d");
?>
<html>
  <body>
    <input type="date" value="<?php echo $today; ?>">
  </body>
</html>

7
<input id="datePicker" type="date" />

$(document).ready( function() {
    var now = new Date();
 
    var day = ("0" + now.getDate()).slice(-2);
    var month = ("0" + (now.getMonth() + 1)).slice(-2);

    var today = now.getFullYear()+"-"+(month)+"-"+(day) ;


   $('#datePicker').val(today);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="datePicker" type="date" />


5

入力日時を入力する必要がある場合は、これを使用できます。

<input type="datetime-local" name="datetime" 
       value="<?php echo date('Y-m-d').'T'.date('H:i'); ?>" />

5

NodeJS(SWIGテンプレートを使用したExpress)の場合:

<input type="date" id="aDate" name="aDate" class="form-control" value="{{ Date.now() | date("Y-m-d") }}" />

5

最も単純なソリューションは、投票数の多いものを含め、UTC時間が使用されることを見落としているようです。以下は、いくつかの既存の回答の合理化されたES6非jQueryバージョンです。

const today = (function() {
    const now = new Date();
    const month = (now.getMonth() + 1).toString().padStart(2, '0');
    const day = now.getDate().toString().padStart(2, '0');
    return `${now.getFullYear()}-${month}-${day}`;
})();
console.log(today); // as of posting this answer: 2019-01-24

入力要素のどのプロパティに割り当てるかを指定する必要があります。valueまたはvalueAsDate?よさそうだ。
ADJenks

4

これは私のコードでやったことですが、テストしたところうまくいきました。inputtype = "date"はcurdateを自動的に設定することをサポートしていないため、この制限を克服するために使用した方法は、PHPコードに次のような単純なコードを使用することでした。 。

<html>
<head></head>
    <body>
        <form ...>
            <?php
                echo "<label for='submission_date'>Data de submissão</label>";
                echo "<input type='date' name='submission_date' min='2012-01-01' value='" . date('Y-m-d') . "' required/>";
            ?>
        </form>
    </body>
</html>

それが役に立てば幸い!


1
こんにちは、SOへようこそ。コードをサポートするための情報を追加し、質問をする人がPHPベースのソリューションを望んでいることを確認してください。
シヴァ

4

どちらの回答も正しくありません。

純粋なJavaScriptを使用する短いワンライナーは、ローカルタイムゾーンを考慮し、追加の関数を定義する必要はありません。

const element = document.getElementById('date-input');
element.valueAsNumber = Date.now()-(new Date()).getTimezoneOffset()*60000;
<input id='date-input' type='date'>

これにより、ミリ秒単位の現在の日時(エポック以降)が取得され、ミリ秒単位のタイムゾーンオフセット(分*ミリ秒あたり60k分)が適用されます。

を使用して日付を設定できelement.valueAsDateますが、Date()コンストラクタへの追加の呼び出しがあります。


4

これは、各ブラウザの動作は言うまでもなく、各ユーザーのローカル時刻形式が異なるため、サーバー側で実際に行う必要があるものです。

HTML日付入力値は、yyyy-mm-ddの形式にする必要が あります。そうでない場合、値は表示されません。

ASPクラシック、またはVBSCRIPT:

current_year = DatePart("yyyy",date) 
current_month = DatePart("m",date) 
current_day = DatePart("d",date) 

IF current_month < 10 THEN
current_month = "0"&current_month
END IF
IF current_day < 10 THEN
current_day = "0"&current_day
END IF

get_date = current_year&"-"&current_month&"-"&current_day
Response.Write get_date

今日の日付の出力:2019-02-08

次にあなたのhtmlで: <input type="date" value="<% =get_date %>"

PHP

これを使うだけです: <input type="date" value="<?= date("Y-m-d"); ?>">


4

これは、次のコードを適用することで非常に簡単です。 PHP

<input type="date" value="<?= date('Y-m-d', time()); ?>" />

日付関数は、日付を取得して現在の日付を返しtime()ます。


2

JavaScriptで:

var today = new Date();

document.getElementById("theDate").value = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2);


1

ルビを使用している場合は、これを使用してデフォルト値を今日の日付と時刻に設定できます。

<input type="datetime-local" name="time" value="<%= Time.now.strftime('%Y-%m-%dT%H:%M') %>" />

1

簡単な解決策:

<input class="set-today" type="date">
<script type="text/javascript">
    window.onload= function() {
        document.querySelector('.set-today').value=(new Date()).toISOString().substr(0,10));
    }
</script>

1
@GeorgeJemptyこれは、UTCの現在の時刻が現在の日付と異なる場合には発生しません。現在の日付をローカルタイムゾーンではなくUTCで返します。
ADJenks

@adjenks Heh真夜中まで10分のテストに最適な時間だったと思います
Dexygen

@adjenks私はついにUTCの落とし穴を回避し、既存のいくつかの同様のjQuery / ES6以外の回答をわずかに改善する半ダースの行を
削除しました

Answerは行末に余分な ")"があり、 "new Date()"の周りに余分な括弧があります。する必要があります: document.querySelector('.set-today').value=new Date().toISOString().substr(0,10);
星のカービィL.ウォレス

0

値を今日の日付に設定するデフォルトの方法はないので、これはそのアプリケーションに依存するはずです。オーディエンスの日付ピッカーへの露出を最大化したい場合は、サーバー側スクリプト(PHP、ASPなど)を使用してデフォルト値を設定します。

ただし、CMSの管理コンソール用であり、ユーザーが常にJSを使用している、またはサイトが信頼されていることがわかっている場合は、JSを安全に使用して、jlbrunoのようにデフォルト値を入力できます。


0

同じ問題があり、簡単なJSで修正しました。入力:

<input type="date" name="dateOrder" id="dateOrder"  required="required">

JS

<script language="javascript">
document.getElementById('dateOrder').value = "<?php echo date("Y-m-d"); ?>";
</script>

重要:JSスクリプトは、最後のコード行、または入力後に入力する必要があります。このコードを前に配置すると、スクリプトは入力を見つけられないためです。


2
とにかくPHPを使用しているのなら、なぜJavaScriptに悩むのでしょうか。
Blazemonger 2014年

0

HTML自体には、今日の日付を入力フィールドに挿入するデフォルトのメソッドはありません。ただし、他の入力フィールドと同様に、値を受け入れます。

PHPを使用して今日の日付をフェッチし、それをフォーム要素の値フィールドに入力できます。

<?php
    // Fetch the year, month and day
    $year = date(Y);
    $month = date(m);
    $day = date(d);

    // Merge them into a string accepted by the input field
    $date_string = "$year-$month-$day";

    // Send to the browser the input field with the value set with the date string
    echo "<input type='date' value='$date_string' />";
?>

値フィールドは入力としてフォーマットYYYY-MM-DDを受け入れるため、変数を作成するだけで $date_string形式を受け入れます。入力値が受け入れるのと同じ形式でを今日の日付から取得した年、月、日をにです。事前に選択された日付があります!

お役に立てれば :)

編集:

PHPではなくHTML内に入力フィールドをネストしたい場合は、次のようにします。

<?php
    // Fetch the year, month and day
    $year = date(Y);
    $month = date(m);
    $day = date(d);

    // Merge them into a string accepted by the input field
    $date_string = "$year-$month-$day";
?>
<html>
    <head>...</head>
    <body>
        <form>
            <input type="date" value="<?php print($date_string); ?>" />
        </form>
    </body>
</html>

この質問はしばらく前(2年前)に尋ねられたことに気づきましたが、インターネットで明確な答えを見つけるのにまだ時間がかかりました。そのため、答えを探しているすべての人に役立つでしょう。みんなを大いに助けます:)

別の編集:

ほとんど忘れてしまいましたが、過去に私にとって非常に苦労したことは、date()関数を使用するPHPでスクリプトを作成するときは常に、デフォルトのタイムゾーンを設定するのを忘れることです。

構文はdate_default_timezone_set(...);です。ドキュメントはこちらのPHP.netにあり、関数に挿入できるサポートされているタイムゾーンのリストはこちらにあります。私がオーストラリアにいるので、これは常に迷惑でした、私がこれを適切に設定しなかった場合、デフォルトでUTC + 0000が必要なUTC + 1000が必要なので、すべてが常に10時間押し戻されます。


0

ピーターさん、ありがとうございます。コードを変更しました。

<input type='date' id='d1' name='d1'>

<script type="text/javascript">
var d1 = new Date();
var y1= d1.getFullYear();
var m1 = d1.getMonth()+1;
if(m1<10)
    m1="0"+m1;
var dt1 = d1.getDate();
if(dt1<10)
dt1 = "0"+dt1;
var d2 = y1+"-"+m1+"-"+dt1;
document.getElementById('d1').value=d2;
</script>

3
実際のアプリケーションではdocument.writeを使用しないでください。使用には多くの問題があります。
Peter Hart

ピーター、どんなことを説明できるの?理解しました ?
Nikhil sHETH 2013年

ピーター、また日付= uは入力タイプにデフォルト値として現在の日付を取得する方法に言及
ニキルsHETH

1
それが機能しないということではありませんが、一般的にdocument.writeを使用することは悪い習慣です。これが事実である理由の無数があります、ここではいくつかの例です:stackoverflow.com/questions/802854/... 私は絶対に、クライアント上のJavaScriptでこれをしなければならなかった場合、私は要素と文書上のIDを使用すると思います。このページの他の回答と同様に、要素を取得して変更するgetElementById。
Peter Hart

0

そして、ASP VBScriptを使用している人のために

<%
'Generates date in yyyy-mm-dd format
Function GetFormattedDate(setDate)
strDate = CDate(setDate)
strDay = DatePart("d", strDate)
strMonth = DatePart("m", strDate)
strYear = DatePart("yyyy", strDate)
If strDay < 10 Then
  strDay = "0" & strDay
End If
If strMonth < 10 Then
  strMonth = "0" & strMonth
End If
GetFormattedDate = strYear & "-" & strMonth & "-" & strDay
End Function
%>

そして、本文では、要素は次のようになります。

<input name="today" type="date" value="<%= GetFormattedDate(now) %>" />

乾杯!


0

これらすべての時間の後でさえ、それは誰かを助けるかもしれません。これは単純なJSソリューションです。

JS

  let date = new Date();
  let today = date.toISOString().substr(0, 10);
  //console.log("Today: ", today);//test
  document.getElementById("form-container").innerHTML =
    '<input type="date" name="myDate" value="' + today + '" >';//inject field

HTML

 <form id="form-container"></form>

同様のソリューションは、日付形式を変換する追加のライブラリなしでAngularで機能します。Angularの場合(共通のコンポーネントコードのためにコードが短縮されています):

//so in myComponent.ts 
//Import.... @Component...etc...
date: Date = new Date();
today: String; //<- note String
//more const ...
export class MyComponent implements OnInit {
   //constructor, etc.... 
   ngOnInit() {
      this.today = this.date.toISOString().substr(0, 10);
   }
}
//so in component.html 
<input type="date" [(ngModel)]="today"  />

これは、デフォルト値を使用するだけでは面倒です。
改革

あなたが指摘しようとしている2つの独立した例のどちらですか?両方の例での4行のコード....最初の例は純粋なhtml + jsなので、コメントを数えない場合は、コンテナーを作成し、コードを3行コピーして貼り付けます。私がコメントを残した理由であった角度の例についても同じです。意味がわからない...
StefaDesign
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.