2017-11-14 1 views
-1

私はmoment.jsを使用していて、ユーザーが入力した新しい時刻で日付/時刻文字列を更新したいと考えています。日付は変わっておらず、時刻は変わっていません。タイムゾーンの変更はありません。ちょうど時と分の値が変更されている可能性があります。moment.jsでは、日付と時刻の文字列を保持して日付を保持することはできますが、時刻は変更できますか?

私はこのような文字列をどのようにして、時間が異なるように変換しますか?

私が期待するだろう。これは、次のとおりです。

const dateTimeString = '2017-11-14T16:04:54.0086709-06:00' 
const newDateTimeString = (
    moment(dateTimeString) 
    .changeTime('05:20 PM') 
    .format() 
) 
// newDateTimeString === '2017-11-14T17:20:00.0086709-06:00' 
+1

あなたは瞬間のドキュメントで見たことがありますか?ライブラリは、ネイティブのDateプロトタイプからすべての基本的なセッター関数を公開しているので、日付を作成し、必要な時間、分、秒、およびミリ秒を設定することができます。 – Pointy

答えて

1

をユーザーが入力した時は、あなたができる13:00のようなフォーマットされている場合:

https://momentjs.com/docs/#/get-set/hour/を使用して
const dateTimeString = '2017-11-14T16:04:54.0086709-06:00' 
var userInput = "13:20" 
    const newDateTimeString = (
     moment(dateTimeString) 
     .hours(userInput.split(":")[0]) 
     .minutes(userInput.split(":")[1]) 
     .format() 
    ) 

https://momentjs.com/docs/#/get-set/minute/

場合それは、PMとAMシステムでフォーマットされていますが、あなたは同じことができますが、それは午前5時かPMかを知るために少しずつ解析します。

+0

その論理を使って、ちょうど 'moment('05:20 PM ')'を実行し、余分なパーズを解析しなければ、 '.hours()'と '.minutes()' – Sawtaytoes

+0

@Sawtaytoesコンストラクタの引数として「午後5:20 PM」を受け入れるかどうかは分かりませんが、そうであればあなたのアイデアはあなたが必要とするものです: – Sorikairo

+0

あなたはこれを次のようにしなければなりません: ''瞬間( '5:20 PM'、「hh:mm A」)。 – Sawtaytoes

0

1つの可能な方法は、日付を取得し、その後、そのような別のmoment()呼び出しでカスタム時間値とそれを組み合わせるために瞬間を使用することです:

const newDateTimeString = (
    moment(`${moment(dateTimeString).format('YYYY-MM-DD')} 05:20 PM`) 
    .format() 
) 
+0

このコードは、入力が認識された形式(ISO 8601またはRFC 2822)でないため、非推奨警告を生成します。['moment(String)'](http ://momentjs.com/docs/#/parsing/string/)、認識されたフォーマットについて読んでください。あなたの場合、['moment(String、String)'](http://momentjs.com/docs/#/parsing/string-format /)を使用します。 – VincenzoC

2

changeTimeのような機能に建てられ何、あなたが書くことができますがありませんあなた自身がsetを使用しています。

あなたはmoment.fn

Momentプロトタイプはmoment.fnを介して公開されて使用してchangeTimeを追加することができます。独自の関数を追加したい場合は、それを配置します。

あなたがhours()minutes()ようset(Object(String, Int))とゲッターを使用し、その後、moment(String, String)を使用して値をあなたの「追加するための時間」で一時瞬間オブジェクトを作成することができます。ここで

ライブのサンプル:

moment.fn.changeTime = function(timeString) { 
 
    let m1 = moment(timeString, 'hh:mm A'); 
 
    return this.set({h: m1.hours(), m: m1.minutes()}); 
 
} 
 

 
const dateTimeString = '2017-11-14T16:04:54.0086709-06:00' 
 
const newDateTimeString = (
 
    moment(dateTimeString) 
 
    .changeTime('05:20 PM') 
 
    .format() 
 
) 
 

 
console.log(newDateTimeString);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.2/moment.min.js"></script>

+0

@VincenzoCのお返事ありがとうございます。私は実際には、正確なAPIをコピーしたいと思っていませんでした。'format'関数は' fn'を使って 'moment 'を展開することなく、実際に私が望むことをします。 – Sawtaytoes

関連する問題