Dateプロトタイプのいくつかの拡張機能を使用して、いくつかの操作を実行しています(アドバイス:それは実行しないでください、現在のプロジェクトでは遅すぎます)。いつもよりもいくつか問題がある。 H内の文字列を解析するためにJavaScriptが正しく解析されない
:m書式、私はカスタム関数を作り、このような日付のプロトタイプにそれを割り当てられて:あなたは日付オブジェクトをログに記録しようとしたが、最近まで働いたときに
Date.__parse = Date.parse;
Date.parse = function(string){
var pattern = /^\d{1,2}:\d{1,2}/ig;
var today = new Date();
if (pattern.exec(string)){
var year = today.getFullYear();
var month = today.getMonth()+1;
var day = today.getDate();
var t = year+"-"+month+"-"+day+" "+string;
var timestamp = Date.__parse(t);
return new Date(timestamp);
}
else{
return new Date(Date.__parse(string));
}
}
醜いです。
Date.parseは「d-m-Y」形式の日付で動作するようですが、最近は「無効な日付」を返しています。
メジャーなブラウザが日付を解析する方法や仕様が変更される方法に何か変わったのですか、以前にエラーがあったと仮定しなければならなかったのですが、運が良かったため "無効な日付" (私は主に入力フィールドを検証するために関数を使用しているので、気付かないうちに非常にうまく通過する可能性があります)。
私は自分の日付スクリプトを書いて、js Dateオブジェクトを完全に忘れてしまいます。本当に恐ろしいです(moment.jsを使用しようとしましたが、私が使っているコンポーネントのパフォーマンスは非常に悪く、なぜ私はカスタム機能を作らなければならなかったのですか)。
より良く理解するためにEDIT
。私がやっていたもの
が動作するように見えた:私は、検証エラーを追跡した後に見つけたもの
Date.parse("23-7-2016") // Never got an error, expected 23 Jul 2016
:
var startDate = Date.parse("23-7-2016");
console.log(startDate.toISOString()); //Got Invalid Date
私が起こっているかもしれないと思う何
var startDate = Date.parse("12-7-2016");
// expected 12 Jul 2016, got 7 Dec 2016, silently fails, everyone is happy
なぜ私は前のことだと思います。ケースはそうではありません:私はインタラクティブなスケジューラを使用し、何千ものテストを実行しましたが、このようなエラーはほとんど気付かれませんでした。
最悪のシナリオ:クロムが更新され、日付の解析方法が変更されました。
わからない...誰かが私を啓発できることを望みました。
あなたがして、この機能を提供するためのいくつかの値の入力例を与えることができますか?また、一般的な質問 - なぜあなたは文字列に日付を変換するのですか?それはあなたが何らかの外部ソースから文字列として日付を取得したか、またはクライアントとサーバー間の通信のためにそれを行うためですか? –
私はpattern.execの代わりにあなたの例に基づいてpattern.testを使うべきだと思います。 –
申し訳ありませんが、例が広すぎます。私がそれを行う主な用途は、月間カレンダー、週スケジュール、または毎日のスケジュールとして表示されるイベントスケジューラーです。たとえば、週単位のビューでは、イベントをフックして後で描画するために、私はweekDaysを過ぎてから何時間も繰り返す必要があります。機能の一部はイベントを追加することで、日付を反復するときに、それらを読み込み可能なローカライズされた文字列に変換する必要があります(私はテキストパーサー全体をポストしません)。 1日をクリックすると、日付の値を保存する必要があります。 – sergio0983