2

次のコードでjQuerydatepickerを使用します

$(".item").datepicker({
  showWeek: true,
  firstDay: 1,
  minDate: -30,
  dateFormat: 'mm-dd-yy'
});

そのdatepickerの値は、mysqlテーブルにデータを挿入するphp関数にajaxを介して送信されます。

datemysqlデータベースの列タイプはですDatetime

datepicker入力値から値を読み取るたびにdate、データベースの列が空になるたびにが表示されます00-00-0000 00:00:00

私はPHPの初心者で、どこかで間違いを犯した可能性があります。

phpコード

mysqli_query($connect, "Insert into tab(date) values ('".$myData."')");

mysqlのその権利でjavascriptの日付をフォーマットする方法は?

4

6 に答える 6

4

最初に、datepickerがサーバーに正しい値を送信していることを確認できますか?

どこかで値を警告してみてください。

javascriptからの正しい入力がある場合、スクリプトのphp部分は次のように実行できます。

if (isset$_GET['date']){$date=$_GET['date'];}
$date=date("Y-m-d h:i:s",strtotime($date));

エコーアウトして正しいことを確認し、最後にその$dateをテーブルに挿入します。

于 2012-08-30T17:57:27.607 に答える
1

mysqlの日付形式はYYYY-MM-DDであるため、 strtotimeを使用できます。

$myDataSQL = date("Y-m-d", strtotime($myData));
mysqli_query($connect, "Insert into tab(date) values ('".$myDataSQL."')");

ちなみに、この特定のケースではそれほど重要ではありませんが、SQLインジェクションの問題を回避するためにプリペアドステートメントを使用することをお勧めします。私は常にプリペアドステートメントを使用するので、それについて考える必要はありません。

編集:strtotimeが機能するには、/セパレータが必要なようです。

PHP 5.3以降を使用している場合は、次のDateTimeクラスを使用できます。

$date = DateTime::createFromFormat('m-d-y', $myData);
$myDataSQL = $date->format('Y-m-d');
mysqli_query($connect, "Insert into tab(date) values ('".$myDataSQL."')");
于 2012-08-30T17:53:28.923 に答える
0

mysqlのドキュメントによると:

'YYYY-MM-DD'または'YY-MM-DD'形式の文字列として。「リラックスした」構文が許可されます。日付部分の間の区切り文字として、任意の句読文字を使用できます。たとえば、「2012-12-31」、「2012/12/31」、「2012 ^ 12 ^ 31」、および「2012 @ 12@31」は同等です。

したがって、datepickerが日付を取得する形式を変更するだけで済みます。

$( ".item" ).datepicker({ dateFormat: "yy-mm-dd" });

これを更新に含めるとうまくいくはずであり、解析のために追加のサーバー操作も必要ありません。サーバーに安全に到達することを確認してください。

于 2012-08-30T17:58:35.297 に答える
0

同様に適切なジェロエンの答えの別の見方

$myDataSQL = date("c", strtotime($myData));
mysqli_query($connect, "Insert into tab(date) values ('".$myDataSQL."')");

ISO 8601の日付をどこでも使用すると、タイムゾーンが表示されるので扱いやすくなります。さらに、mysqlに挿入します。

また、過去に、初期化でより適切な形式を指定する必要があるという点で、jQueryデータピッカーに問題がありました。

多分試してみてください

$(".item").datepicker({
    showWeek: true,
    firstDay: 1,
    minDate: -30,
    dateFormat: "yy/mm/dd"
});
于 2012-08-30T17:59:16.233 に答える
0

私はコンバーターを使用しています(ソースコードはこちら:https ://github.com/lingtalfi/DatePickerHelper/blob/master/DatePickerHelper.php )

使用法:

<?php
    echo DatePickerHelper::convertFromDatePickerToPhpDate("dd/mm/yy"); // prints d/m/Y
    echo DatePickerHelper::convertFromPhpDateToDatePicker("Y-m-d"); // prints yy-mm-dd
    $birthdayDate = "09/12/1944"; // your input from the web
    echo DatePickerHelper::convertFromNumericInputToMysqlDate($birthdayDate, "d/m/Y"); // 1944-12-09

-

class DatePickerHelper
{


    private static $map = [
        "yy" => "<1>",
        "y" => "<2>",
        "MM" => "<3>",
        "M" => "<4>",
        "mm" => "<5>",
        "m" => "<6>",
        "DD" => "<7>",
        "D" => "<8>",
        "oo" => "<9>",
        "o" => "<10>",
        "dd" => "<11>",
        "d" => "<12>",
    ];

    private static $map2 = [
        "<1>" => 'Y',
        "<2>" => 'y',
        "<3>" => 'F',
        "<4>" => 'M',
        "<5>" => 'm',
        "<6>" => 'n',
        "<7>" => 'l',
        "<8>" => 'D',
        "<9>" => 'z', // note: php doesn't have "day of the year with three digits", but this is the closest
        "<10>" => 'z',
        "<11>" => 'd',
        "<12>" => 'j',
    ];


    private static $mapRegex = [
        'Y' => '<1>',
        'y' => '<2>',
        'm' => '<3>',
        'n' => '<4>',
        'd' => '<5>',
        'j' => '<6>',
    ];

    private static $mapRegex2 = [
        '<1>' => '(?P<year4>[0-9]{4})',
        '<2>' => '(?P<year2>[0-9]{2})',
        '<3>' => '(?P<month_leading>[0-9]{2})',
        '<4>' => '(?P<month_no_leading>[0-9]{1,2})',
        '<5>' => '(?P<day_leading>[0-9]{2})',
        '<6>' => '(?P<day_no_leading>[0-9]{1,2})',
    ];


    public static function convertFromDatePickerToPhpDate(string $datePickerFormat): string
    {
        $map = self::$map;
        $map2 = self::$map2;
        $first = str_replace(array_keys($map), array_values($map), $datePickerFormat);
        return str_replace(array_keys($map2), array_values($map2), $first);
    }

    public static function convertFromPhpDateToDatePicker(string $phpDate): string
    {
        $map2 = array_flip(self::$map2);
        $map = array_flip(self::$map);
        $first = str_replace(array_keys($map2), array_values($map2), $phpDate);
        return str_replace(array_keys($map), array_values($map), $first);
    }


    /**
     * @param string $input , the string to convert, the format of this string should match the given phpFormat
     *                  Plus, it must contain exactly:
     *                          - one day component
     *                          - one month component
     *                          - one year component
     *
     * @param string $phpFormat , all components of the phpFormat  have to be one of those:
     *          - Y: year, four digits
     *          - y: year, two digits
     *          - m: numeric month, with leading zeros
     *          - n: numeric month, without leading zeros
     *          - d: numeric day of the month, with leading zeros
     *          - j: numeric day of the month, without leading zeros
     */
    public static function convertFromNumericInputToMysqlDate(string $input, string $phpFormat)
    {
        $map = self::$mapRegex;
        $map2 = self::$mapRegex2;
        $first = str_replace(array_keys($map), array_values($map), $phpFormat);
        $pattern = str_replace(array_keys($map2), array_values($map2), $first);

        if (preg_match('!' . $pattern . '!', $input, $match)) {
            $day = $match['day_leading'] ?? $match['day_no_leading'] ?? null;
            if (null !== $day) {
                $day = (int)$day;
                $month = $match['month_leading'] ?? $match['month_no_leading'] ?? null;
                if (null !== $month) {
                    if (
                        array_key_exists("year4", $match) ||
                        array_key_exists("year2", $match)
                    ) {
                        // a component of each type is there, we will be able to return a result
                        if (array_key_exists("year4", $match)) {
                            $year = (int)$match['year4'];
                        } else {
                            // assumed it's 20, but we don't know really, that sucks.
                            // That's why you should use year4 instead...
                            $year = "20" . $match['year2'];
                            $year = (int)$year;
                        }

                        return $year . "-" . sprintf('%02s', $month) . "-" . sprintf("%02s", $day);
                    }
                }
            }
        }
        return false;
    }

}
于 2018-06-05T04:43:13.327 に答える
0

JavaScriptの場合と同様に、日付値はを使用して作成さlet date = new Date("2017-01-26");れます。PHPスクリプトで日付をフォーマットする場合は、同じフォーマットを使用する必要があります。

次の形式のようにあなたのphp日付を変換するだけですdate('Y-m-d', $date)

<input type="date">これにより、javascriptフィールドの正しい形式が得られます。

于 2019-09-10T08:50:41.073 に答える