7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SafariでDate(JavaScript)を扱う場合の注意

Last updated at Posted at 2017-08-13

JavasScriptで日付処理をすることってよくあると思うんですが、この前Safari対応で少しハマったので備忘録。

やりたいこと

  • 日付の処理を行う画面の作成
  • Chrome / Safariからのアクセスを想定
  • YYYY MMM DDという日付を処理したい

サンプルで試す

例えばこんなことをやってみます。

<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
  </head>

  <body>
    <script type="text/javascript">
      function date_test() {
        var date = new Date("2017 Aug 11");
        document.getElementById("result").innerHTML = date;
      }
      
    </script>
    <p>Convert "2017-08-11" to Date object.</p>
    <div><input type="button" value="Date Test" onclick="date_test();"/></div>
    <div>Result: <span id="result"></span></div>
  </body>

</html>

Chromeの結果

スクリーンショット 2017-08-13 17.40.24.png

Safariの結果

スクリーンショット 2017-08-13 17.40.42.png

SafariでのDateの動きが他のブラウザと異なるのは有名な話らしいですが、これは困った。

Moment.jsで解消する

今回はMoment.jsを利用しました。

こういう書き方をすれば今回のパターンには対応できます。

<!DOCTYPE html>
<html>

  <head>
    <script data-require="moment.js@*" data-semver="2.14.1" src="https://npmcdn.com/moment@2.14.1"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body>
    <script type="text/javascript">
      function date_test() {
        var dateStr = moment("2017 Aug 11", "YYYY MMM DD").format("YYYY/MM/DD");
        
        var date = new Date(dateStr);
        document.getElementById("result").innerHTML = date;
      }
      
    </script>
    <p>Convert "2017 Aug 11" to Date object.</p>
    <div>
      <input type="button" value="Date Test" onclick="date_test();" />
    </div>
    <div>Result:       <span id="result"></span>
    </div>
  </body>

</html>

Chromeで試した場合

スクリーンショット 2017-08-13 17.54.29.png

Safariで試した場合

スクリーンショット 2017-08-13 17.54.35.png

無事、変換されました。

まとめ

JavaScriotでDateを扱う際には気をつけろ、ってことですね(色々なところですでに言われていることではありますが)。現状Moment.jsを使っておけば自前でConverter書かなくても大丈夫な気がします。

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?