2

mmmm d、yyyy (「有効期限」と呼ばれる) で日付を表示するテキスト フィールドがあり、日 (d)、月 (m)、および年 (yyyy) だけを表示する 3 つの小さなフィールドを作成しようとしています。 ) 各フィールドで。

このコードを使用して、各フィールドにデータをインポートしようとしました:

var sField = 'Expiry Date'

そして、必要に応じて「d」、「m」、または「yyyy」にカスタムフォーマットします。小さな書式プレビュー ウィンドウでは、目的の出力が表示されますが、フィールドは空白のままです。

また、奇妙なのは、月で始まる書式設定でのみ機能することです。

私が最初の日付を取得するフィールドは、それが異なる場合、別の計算から作成されます。「有効期限」は、「日付」というフィールドからデータを取得します。「date」の値から 30 日後に有効期限を割り当てるコードを次に示します。

// define the value for the date field
var sField = 'Date'
// define the format of the date string
var cFormatDate = 'mm/dd/yyyy';
// define some time constants
var fSecond = 1000; // number of milliseconds in one second
var fMinute = 60 * fSecond; // number of milliseconds in a minute
var fHour = 60 * fMinute; // number of milliseconds in an hour
var fDay = 24 * fHour; //number of milliseconds in a day
// get the field object's string value
var fTodayDate = this.getField(sField).value;
// convert the string value into a date object
var oDate = util.scand(cFormatDate, fTodayDate);
// convert the date object to a value in milliseconds
var fDate = oDate.getTime();
// add 30 days to value using the number of milliseconds in a day
var fNewDate = fDate + (30 * fDay);
// convert computed date value to date object
var oNewDate = new Date(fNewDate);
// set the field's value to the date string for the date object
event.value = util.printd(cFormatDate, oNewDate);

前もって感謝します!!

4

2 に答える 2

0

Acrobat については何も知りませんが、その Date オブジェクトは ECMA-262 に準拠していると思います。日付文字列を日付オブジェクトに変換する最良の方法は、自分で解析することです。Date関数/コンストラクターまたはDate.parse.

あなたの投稿から、日付文字列は のようOctober 17, 2012です。それを助けるために以下の機能があります。

丸一日を追加する最良の方法は、日付に追加することです。そのため、日付オブジェクトが与えられます。

// Create a new Date object
var now = new Date();

// Copy it
var then = new Date(now);

// Add 30 days
then.setDate(then.getDate() + 30);

1 月 28 日 (うるう年の場合は 1 月 29 日) より後の日付に 30 を加算すると、3 月になることに注意してください。

編集

日付文字列解析関数:

// Expects mmm d, yyyy e.g. October 17, 2012 or Oct 17, 2012
function parseDateString(s) {
    var months={jan:0, feb:1, mar:2, apr:3, may:4, jun:5, 
                jul:6, aug:7, sep:8, oct:9, nov:10, dec:11};
    var d = s.split(/\s/);
    return new Date(d[2], months[d[0].toLowerCase().substring(0,3)], parseInt(d[1],10));
}
于 2012-10-17T02:06:40.103 に答える
0

単純化しすぎているかもしれませんが、完全な日付を含む日付フィールド (名前を「DATE1」にしましょう) があるとします。

そのフィールドを 3 回コピーして、3 つすべての名前に「DATE1」を割り当てていただけないでしょうか。これにより、元の日付フィールドに入力した日付が取得され、他の 3 つのフィールドで複製されます。次に、フィールドのプロパティに移動し、4 つのボックスすべてに「Date」という形式が割り当てられていることを確認してから、3 つの小さいボックスにそれぞれ「dd」、「mm​​」、または「yy」のカスタム日付オプションを割り当てますか?

于 2012-11-05T17:19:22.647 に答える