1

日付を含むmysqlテーブルがあります(形式:yyy-mm-dd)。次に、日付を取得して保存しますが、調達では、ユーザーが目前のタスクを簡単に表示できるように、日付の形式を変更します。私の問題は、(数か月のうちに)遠すぎる日付を取得すると、日付が変更されて1日遅れることです(それ以外の場合は正常に機能します)。javascriptの日付変換がどのように機能するかを読むのに多くの時間を費やしましたが、まだしっかりと理解していません。私が書いたものがなければ、日付は常に1日遅れて変換後に入ります。また、私はオハイオ州にいます。これが私が持っているものです:

    var x = offset*60000;  
    var time = new Date (item.start);
    var time2=time.getTime();
    var time3=time2+x;
    var start = $.datepicker.formatDate('D, d M, yy', new Date (time3));

ここでの問題は何ですか?また、私の教育について簡単に説明していただければ幸いです。ありがとう。

4

2 に答える 2

2

Date問題は、コンストラクターに渡す形式が次のように有効ではないように見えることです-https: //developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date(つまり、拡張されたISO8601のバージョンformat)は有効なES5形式ですが、ブラウザによって正しく解析されません。

したがって、このようなものが必要なものになるはずです。

http://jsfiddle.net/xfz6L/

var date_string = "2012-11-02";

var first_try = new Date(date_string);
alert(first_try.toDateString());

// The following is the code you would use
var date_split = date_string.split("-");
var second_try = new Date(date_split[0], +date_split[1]-1, date_split[2]);
alert(second_try.toDateString());

問題は、それが有効な形式ではないことであると思われるため、すべてのブラウザーがISO8601形式を正しく解析するわけではないため、私の解決策は、提供された文字列を使用し、それを操作して有効なコンストラクターとして機能させることです。

私が考える最も簡単な方法は、「年」、「月」、「日」の順にコンストラクターに渡すことです。

-これを行うには、文字列をで分割してから、各配列インデックスをコンストラクターに渡す必要があります。

月から「1」を引く理由は、範囲が0から11であるためです。

于 2012-10-30T03:30:02.943 に答える
0

yyyy-mm-dd形式は有効なISO日付ですが、残念ながら、JavaScriptDateコンストラクターは、エポック、RFC 2822日付、または個別の日付コンポーネント以降のミル秒の値のみをサポートすることに注意してください。

この場合、日付コンポーネントを使用するのが最も簡単な場合があります。

function parseDate(isoDateStr) {
  var parts = isoDateStr.split(/-/);
  return new Date(parts[0], parts[1]-1, parts[2]);
}

月の値は1ベースではなく0ベースであることに注意してください。

于 2012-10-30T03:51:51.493 に答える