0

ユーザーが時間を設定できるようにする日付ピッカーをセットアップする必要があります。16/6/6 03:28 午後

$(".datepicker").each(function(index){
var picker = new Pikaday({
    field: $(this)[0],
    position: 'bottom left',
    format: "D/M/YY hh:mm A"
});
});

ただし、フォーマットが機能している間、pikaday は午前 12:00 に戻り続けます。

私は何を間違っていますか?これが私の問題の実例です https://jsfiddle.net/pturula/hcba6L33/

4

3 に答える 3

1

私が理解している限り、Pikaday日付ピッカーであり、実際には完全なタイムスタンプで動作する標準の javascript Dateオブジェクトを返しますが、日付と時刻のピッカーではありません。

日付は、単純に 0:00h (または 12:00pm) のタイムスタンプで表されます。

pikadayは標準の JavaScript Dateオブジェクトを使用するため、時刻の部分が含まれている場合でも有効な書式設定文字列を指定できますが、選択できるのは日のみであるため、常に 0:00h のタイムスタンプが取得されます。

日付と時刻のピッカーが必要な場合は、別の実装を検索するか、自分で実装する必要があります (たとえば、pikaday と jquery timepicker を使用して)。

それが役に立てば幸い...

編集:コメントで言ったように、1 つのフィールドとして機能する 2 つの別々のフィールドとして自分で実装できます。

jsfiddle の例: https://jsfiddle.net/L82h4x1y/

$(".datepicker").each(function(index){

    var container = $("<span></span>");
    var dateFld = $("<input type=\"date\"></input>")
        .attr("placeholder", "dd/mm/yyyy")
        .appendTo(container)
    ;
    var timeFld = $("<input type=\"time\"></input>")
        .attr("placeholder", "h:mm [pm|am]")
        .appendTo(container)
    ;
    var target = $(this)        // Original input field.
        .replaceWith(container) // Replace it in DOM.
        .appendTo(container)    // Reinsert inside new container.
        .hide()                 // Hide it (HINT: comment out me to debug).
    ;

    var picker = new Pikaday({
        field: dateFld[0],
        //format: "D/M/YY hh:mm A"
        format: "D/M/YY"
    });

    function updateFld(){

        // Calculate date part:
        // --------------------
        try {
            var d = new Date(dateFld.val());
            if (isNaN(d)) throw "Wrong date";
        } catch (e) {
            var d = new Date(); // Use current day on invalid values.
        };
        d = d.getDate()
            +"/"+(d.getMonth()+1) // "+1" fixes .getMongh() counting from 0.
            +"/"+d.getFullYear()
        ;

        // Calculate time part:
        // --------------------
        try {
            var t = new Date(
                "2000/1/1 " // Prepend some valid date (notice the ending space).
                +timeFld.val()
            );
            if (isNaN(t)) throw "Wrong time";
        } catch (e) {
            var t = new Date("2000/1/1 0:0"); // Use 0:00 on invalid values
        };
        t = t.getHours() // 0-23
            +":"+t.getMinutes();

        // Update target field:
        // --------------------
        //
        target.val(d+" "+t);
        // NOTE: You will receive 24h date. If you really need "am/pm" you
        // should do a few more plumbing.

    };

    dateFld.on("change", updateFld);
    timeFld.on("change", updateFld);


});

関連するメモ:

  • 追加の入力フィールドには「名前」属性がないため、送信時に送信される唯一のフィールドは元のフィールドになることに注意してください。

  • 時間フィールドは午前/午後または 24 時間 (有効な javascript日付オブジェクトの時間) を受け入れますが、元のフィールドには常に標準の日付/時間 (24 時間) が入力されます。それがあなたが望むものではない場合は、さらにいくつかの配管を行う必要があります.

  • 前述のように、timepicker プラグインを時間フィールドに追加することもできます (まだ行っていません)。

  • jsfiddle でより適切にテストするには、元のフィールドの「.hide()」行をコメントアウトします。このようにして、リアルタイムで効果を確認できます。

于 2016-06-14T16:33:10.910 に答える
0

https://jsfiddle.net/KingRider/hcba6L33/3/

$(".datepicker").each(function(index){
        var hour = new Date();
    console.log(hour.get)
    var picker = new Pikaday({
        field: $(this)[0],
        format: "D/M/YY "+hour.getHours()+":"+hour.getMinutes()
    });
});

これは?時間が必要です。

于 2016-06-21T14:33:56.967 に答える