JavaScript - Get system short date format

后端 未结 6 791
情深已故
情深已故 2020-12-10 12:28

Is there any way to get system short date format in JavaScript?

For example whether system\'s short date is in American format eg. m/d/Y or in european eg. d/m/Y

6条回答
  •  离开以前
    2020-12-10 12:41

    I've created a workaround to determine which format the user's browser is using. This is in C# but the logic is the same:

    Here are the steps:

    1. First try to convert the user's browser date into American format (mm-dd-yyyy). Convert.ToDateTime is using the American date format.

    2. If that fails it means the user is using European format (dd-mm-yyyy). However, this will only cover the day 13 to 31 because this is not a valid month.

    3. If the conversion is successful, do another check to determine if the converted date is between the current UTC day + 1 day (to cover UTC+14) and current UTC day - 1 day (to cover UTC-12). https://www.timeanddate.com/time/current-number-time-zones.html

    4. If the converted date is out of the current date range, it means the user's browser is using European format (dd-mm-yyyy) and you can convert it to American format if you want.

               string localeDateString = "01/11/2020"; // e.g. input is using European format (dd-mm-yyyy)
               var localeDate = new DateTime();
      
               try
               {
                   localeDate = Convert.ToDateTime(localeDateString);
                   //var checkTheFormatOfDateInput = localeDate.ToLongDateString();
                   var currentDateTime = DateTime.UtcNow;
                   //var currentDateTime = Convert.ToDateTime("11/01/2020");
                   //var checkTheFormatOfCurrentDate = Convert.ToDateTime("11/01/2020").ToLongDateString();
                   var currentDateTimePositive = currentDateTime.AddDays(1);
                   var currentDateTimeNegative = currentDateTime.AddDays(-1);
      
                   var outOfCurrentDateRange = !(localeDate.Ticks > currentDateTimeNegative.Ticks && localeDate.Ticks < currentDateTimePositive.Ticks);
      
                   if (outOfCurrentDateRange)
                   {
                       localeDate = DateTime.ParseExact(localeDateString, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                   }
               }
               catch
               {
                   localeDate = DateTime.ParseExact(localeDateString, "dd/MM/yyyy", CultureInfo.InvariantCulture);
               }
      
               //var checkTheEndResultFormat = localeDate.ToLongDateString();
      

    Below is the clean code wrapped in a method:

        private DateTime ConvertAmericanOrEuropeanDateFormatToAmericanDateFormat(string localeDateString)
        {
            var localeDate = new DateTime();
    
            try
            {
                localeDate = Convert.ToDateTime(localeDateString);
                var currentDateTime = DateTime.UtcNow;
                var currentDateTimePositive = currentDateTime.AddDays(1);
                var currentDateTimeNegative = currentDateTime.AddDays(-1);
    
                var outOfCurrentDateRange = !(localeDate.Ticks > currentDateTimeNegative.Ticks && localeDate.Ticks < currentDateTimePositive.Ticks);
    
                if (outOfCurrentDateRange)
                {
                    localeDate = DateTime.ParseExact(localeDateString, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                }
            }
            catch
            {
                localeDate = DateTime.ParseExact(localeDateString, "dd/MM/yyyy", CultureInfo.InvariantCulture);
            }
    
            return localeDate;
        }
    

提交回复
热议问题