Проверьте, какой формат даты использует пользователь - PullRequest
0 голосов
/ 16 сентября 2018

Как я могу проверить в своем приложении Rails, какой формат даты и времени пользователь использует в качестве своего значения по умолчанию?

У меня есть такой метод:

def local_date(date, am_pm = false)
  unless am_pm
    date&.localtime&.strftime('(%d.%m.%Y, %H:%M)')
  else
    date&.localtime&.strftime('(%d.%m.%Y, %I:%M %p)')
  end
end

Мне нужно установить am_pm соответственнодля пользователей локальных машин формат даты и времени БЕЗ использования параметра :locale, поскольку не все, кто говорит по-английски, используют am / pm

1 Ответ

0 голосов
/ 16 сентября 2018

Это достижимо в Rails только с помощью небольшого кода JavaScript на стороне клиента. Код на стороне клиента определит, использует ли пользователь 24-часовой или 12-часовой формат, и сохранит эту информацию в файле cookie.

Ваш код на стороне сервера должен затем прочитать эту информацию из файла cookie и установить соответствующий формат времени.

Добавьте это к вашему app/assets/javascript/application.js файлу.

function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}






var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
var dateString = date.toLocaleTimeString();

//apparently toLocaleTimeString() has a bug in Chrome. toString() however returns 12/24 hour formats. If one of two contains AM/PM execute 12 hour coding.
if (dateString.match(/am|pm/i) || date.toString().match(/am|pm/i) )
{
    //12 hour clock

    //check if we are already rendering in 12 hours format
    if(getCookie("time_format") != "twelve") 
    {
       document.cookie = "time_format=twelve";

       /***
         Now force the browser to reload current page from server.
         Since we had set the the cookie, the server will now render 
         all pages in 12 hours format
       ****/

       location.reload(true).

    }
}
else
{
    //24 hour clock
    document.cookie = "time_format=twenty_four";
}

В вашем приложении контролер

class SomeController < ApplicationController
  around_faction :set_time_format

  def set_time_format
    if cookie[:time_format]=="twelve"
      #Set your desired time format string with 12 hour style
    else
      #default
      #Set your desired time format string with 24 hour style
    end
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...