目次
結論から先にお話しますと、文字列の時刻変換は yyyy/MM/dd 形式をサポートしていますが、一般的な yyyy-MM-dd 形式には互換性の問題があります。加工方法:
new Date(dateString.replace(/-/g, "/"))
1. テスト環境
WeChat バージョン 8.0.40、iPhone XR (システム バージョン 15.2.1)、iPhone 11 (システム バージョン 16.5.1)
2. 問題となる現象
アプレットは、ビジネス システムのバックグラウンドから返される時刻と現在時刻との時差を判断する必要があります。コードは次のとおりです。
//value = '2023-09-01 12:30';
let startDate = new Date(value);
console.log("startDate.getTime()",startDate.getTime());
console.log("new Date().getTime()",new Date().getTime());
let diffValue = startDate.getTime() - new Date().getTime()
console.log("diffValue",diffValue);
WeChat開発ツールでのテストは正常で、XR実機でのテストも正常でしたが、同僚のApple 11携帯電話でテストすると何度も動作しませんでした。WeChat開発ツールのプレビュー機能を使用し、デバッグウィンドウを開いてコンソールに出力されたデータから確認します。
最初は日付文字列が不完全で時刻の取得に失敗したのかと思い、値を2023-09-01 12:30:00に変更しましたが、出力結果は同じでした。js の日付フォーマットを検索すると、定期的な置換を使用する記事を見つけました。
function strToDate(dateStr){
var dateStr = dateStr.replace(/-/g, "/");//现将yyyy-MM-dd类型转换为yyyy/MM/dd
var dateTime = Date.parse(dateStr);//将日期字符串转换为表示日期的秒数
//注意:Date.parse(dateStr)默认情况下只能转换:月/日/年 格式的字符串,但是经测试年/月/日格式的字符串也能被解析
var data = new Date(dateTime);//将日期秒数转换为日期格式
return data;
}
この正規表現は、文字列内の "-" を置き換えるものです。突然、形式の問題ではないかと気づきました。形式の問題でしょうか? 記事の方法に従って修正すると、コードは次のようになります。
let startDate = new Date(value.replace(/-/g, "/"));
console.log("startDate.getTime()",startDate.getTime());
console.log("new Date().getTime()",new Date().getTime());
let diffValue = startDate.getTime() - new Date().getTime()
console.log("diffValue",diffValue);
修正後は正常に時刻情報が取得できることが分かりました。
コンソールは時刻を正しく出力しました。
3. まとめ
解決策は最初に紹介しましたが、この問題は少し奇妙です。WeChat のバージョンは同じです。論理的に言えば、ミニ プログラムを実行するコンテナも同じはずですが、同じプログラムでも結果が異なるのは少し問題です。混乱する。