0
Concat(Date_format(Date_add(Date_format(Str_to_date(
                                               products_options_values,
                                               '%m-%d-%Y'
                                                      ),
                                                      '%Y-%m-%d'),
                                             INTERVAL(2-Dayofweek(Date_format(
                                             Str_to_date(
                                             products_options_values, '%m-%d-%Y'
                                             )
                                             , '%Y-%m-%d')))day), '%b%d'), '-',
       Date_format(Date_add(Date_format(Str_to_date(products_options_values,
                                        '%m-%d-%Y'
       )
       ,
       '%Y-%m-%d'
       ),
       INTERVAL( 8 - Dayofweek( Date_format(Str_to_date(products_options_values,
       '%m-%d-%Y'
       ), '%Y-%m-%d')) )day), '%b%d'))
       AS week_dates,
       Week(Date_format(Str_to_date(products_options_values, '%m-%d-%Y'),
            '%Y-%m-%d'))
                   AS weekdays

上記のmysql日付計算ロジックをjqueryに実装する必要があります。これは、日付を取得するための mysql select ステートメントの一部です。しかし、この日付の計算で何が起こっているのか正確に理解できませんでした。誰かがこれを説明してもらえますか?

4

1 に答える 1

1

このようなコードを理解する鍵は、内側から外側に向かって作業することです。コードをざっと見てみると、最も内側の関数呼び出しが同じであることがすぐにわかります。

DATE_FORMAT(STR_TO_DATE(products_options_values, '%m-%d-%Y'), '%Y-%m-%d')

これら 2 つの関数呼び出しの最も内側にあるSTR_TO_DATEは、文字列を受け取り、 2 番目の引数で指定された形式 (つまり、米国スタイルのmonth-day-year )に従って解析することによりproducts_options_values、MySQL 値に変換します。最も外側の関数呼び出し は、その結果の値を取得し 2 番目の引数で指定された形式(つまりyear-month-day ) にフォーマットします。DATEDATE_FORMATDATE

つまり、これらの呼び出しを組み合わせて、米国スタイルの形式で表された日付をより国際的な形式に変換します。international_dateこれらの呼び出しの代わりに使用して、残りのクエリを書き直します。

Concat(
  Date_format(
    Date_add(
      international_date,
      INTERVAL(
        2 - Dayofweek(international_date)
     ) day
   ),
   '%b%d'
  ),
  '-',
  Date_format(
    Date_add(
      international_date,
      INTERVAL(
        8 - Dayofweek(international_date)
      ) day
    ),
    '%b%d'
  )
) AS week_dates,
Week(international_date) AS weekdays

このDAYOFWEEK関数は、指定された日付の曜日を 1 から 7 までの整数 (1 は日曜日、7 は土曜日) として返します。したがって、日を追加2 - DAYOFWEEK(international_date)すると同じ週の月曜日になります。追加8 - DAYOFWEEK(international_date)すると、次の週の日曜日になります。それがまさにDATE_ADD関数が行っていることです。

これらの日付 (同じ週の月曜日と次の週の日曜日) は、特定の形式 (3 文字の月と 2 桁の日、たとえばJan14or ) でフォーマットされ、区切りハイフンMay18を使用して連結されます。CONCAT結果にはエイリアスが与えられweek_datesます。

結果セットには、エイリアスが指定された別の列もありweekdaysます。これは、WEEK適用される関数の値international_date(つまり、その年の週) を保持します。

于 2012-05-14T08:20:24.180 に答える