2

現在、人間が読める形式で書かれた日付を、SharePoint リストが受け入れる DateTime 文字列に解析しようとしています。これを行うには、次のような ISO に似た形式の文字列が必要であると判断しました2007-08-20T00:00:00Z。SharePoint は、ミリ秒が含まれていない UTC の DateTimes のみを受け入れるようです (何らかの理由で、SharePoint はエラーを返し、ミリ秒を含めると DateTime を受け入れません)。そのため、事前にローカル時間を UTC 時間に変換する必要があります。 ISO文字列に変換します。

以下のコードが使用しているプロセスは次のとおりです。

  1. まず、DateJS を使用して人間の日付を JavaScript の日付に解析します。(問題なく動作しますが、DateJS は放棄されたようです。これを変更して MomentJS を使用する必要があるかもしれません。)
  2. 次に、UTC で新しい瞬間を作成しようとしました。(この行は非常に間違っており、プログラムがクラッシュします。)
  3. 次に、SPServices にそれを ISO に変換させます。SPServices は、DateTime からミリ秒を削除して、SharePoint がそれを受け入れるようにします。(正常に動作します)。

3 つの異なるライブラリをつなぎ合わせるのではなく、これを実現するためのよりエレガントで実用的な方法が必要であると確信しています。私はそれが何であるか分かりません。

var jScriptStartDate = Date.parse("6/29/2014 8:30am"); //JS Date
var jScriptStartDateUTC = moment(jScriptStartDate).utc(); //local date to UTC.
var startDate = $().SPServices.SPConvertDateToISO({ //Sharepoint ISO 8601 format
   dateToConvert: jScriptStartDateUTC,
   dateOffset: "" //Sharepoint dates only accept UTC times, aka no dateOffset.
});
newItem.set_item('EventDate', startDate); //EventDate is internal for StartTime
4

2 に答える 2

6

moment.js を使用するだけでよく、これはすべてドキュメントに記載されています。

moment('6/29/2014 8:30am','M/D/YYYY h:mma').toISOString()

これは、次のすべてを前提としています。

  • ソース値はユーザーのタイム ゾーン (つまり、JavaScript コードが実行されているマシンのタイム ゾーン) にあります。

  • 入力は常に指定された形式になります

また、「am」の前にスペースを入れると、最新のブラウザーのほとんどがライブラリなしでネイティブにこれを実行できることにも言及する価値があります。

new Date('6/29/2014 8:30 am').toISOString()

このアプローチを取る場合、日付部分はユーザーのロケール (m/d/y、d/m/y、y/m/d など) に従って順序付けられることに注意してください。

また、タイトルで「...ミリ秒なし」と言いましたが、質問では詳しく説明しませんでした。問題なくミリ秒を渡すことができると確信しています。それらを削除するためにわざわざ行く正当な理由はありません。しかし、そうしなければならない場合、それは次のようになります:

moment('6/29/2014 8:30am','M/D/YYYY h:mma').utc().format('YYYY-MM-DD[T]HH:mm:ss[Z]')
于 2014-06-11T23:38:52.667 に答える