مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

مشکل در مورد PersianDate در MVC

  • جمعه 2 مهر 1395
  • 12:34
تشکر میکنم

سلام بر اساتید محترم

کد زیرو برای استفاده از تاریخ شمسی استفاده کردم ولی نتیجه بصورت یه عدم اعشاری نشون میده 99.00051661.2631

   public static class Utility
    {
        public static string ToPersianDate( this DateTime t)
        {
            System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
            return string.Format("{0}/{1}/{2}", pc.GetYear(t).ToString(), pc.GetMonth(t).ToString(), pc.GetDayOfMonth(t).ToString());
        }
    }

فراخوانی هم بصورت زیر در صفحه :


        $("#datein").click(function () {
            alert(@DateTime.Now.ToPersianDate());
            PersianDatePicker.Show(this, @DateTime.Now.ToPersianDate());
        });

چکار باید بکنم تا تاریخو درست نشون بده تو فرمت معمول؟

( تو برنامه ویندوزی اوکیه ولی تو وب نه)

پاسخ های این پرسش

تعداد پاسخ ها : 7 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • جمعه 2 مهر 1395
  • 14:06

کلاس زیر را در پروزه ایجاد کنید

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;

namespace GSD.Globalization
{

    public class PersianCulture : CultureInfo
    {
        private readonly Calendar cal;
        private readonly Calendar[] optionals;

        /// <summary>
        /// كد رو بخوان تا بفهمي
        /// </summary>
        /// <param name="cultureName">fa-IR</param>
        /// <param name="useUserOverride">true</param>
        /// <remarks>لطفا در هنگام استفاده به سايت سايان اشاره كنيد.</remarks>
        public PersianCulture()
            : this("fa-IR", true)
        {
        }

        public PersianCulture(string cultureName, bool useUserOverride)
            : base(cultureName, useUserOverride)
        {
            //Temporary Value for cal.
            cal = base.OptionalCalendars[0];

            //populating new list of optional calendars.
            var optionalCalendars = new List<Calendar>();
            optionalCalendars.AddRange(base.OptionalCalendars);
            optionalCalendars.Insert(0, new PersianCalendar());


            Type formatType = typeof(DateTimeFormatInfo);
            Type calendarType = typeof(Calendar);


            PropertyInfo idProperty = calendarType.GetProperty("ID", BindingFlags.Instance | BindingFlags.NonPublic);
            FieldInfo optionalCalendarfield = formatType.GetField("optionalCalendars",
                                                                  BindingFlags.Instance | BindingFlags.NonPublic);

            //populating new list of optional calendar ids
            var newOptionalCalendarIDs = new Int32[optionalCalendars.Count];
            for (int i = 0; i < newOptionalCalendarIDs.Length; i++)
                newOptionalCalendarIDs[i] = (Int32)idProperty.GetValue(optionalCalendars[i], null);

            optionalCalendarfield.SetValue(DateTimeFormat, newOptionalCalendarIDs);

            optionals = optionalCalendars.ToArray();
            cal = optionals[0];
            DateTimeFormat.Calendar = optionals[0];

            DateTimeFormat.MonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
            DateTimeFormat.MonthGenitiveNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
            DateTimeFormat.AbbreviatedMonthNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
            DateTimeFormat.AbbreviatedMonthGenitiveNames = new[] { "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };


            DateTimeFormat.AbbreviatedDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
            DateTimeFormat.ShortestDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
            DateTimeFormat.DayNames = new string[] { "یکشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };

            DateTimeFormat.AMDesignator = "ق.ظ";
            DateTimeFormat.PMDesignator = "ب.ظ";

            /*
            DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
            DateTimeFormat.LongDatePattern = "yyyy/MM/dd";
            
            DateTimeFormat.SetAllDateTimePatterns(new[] {"yyyy/MM/dd"}, 'd');
            DateTimeFormat.SetAllDateTimePatterns(new[] {"dddd, dd MMMM yyyy"}, 'D');
            DateTimeFormat.SetAllDateTimePatterns(new[] {"yyyy MMMM"}, 'y');
            DateTimeFormat.SetAllDateTimePatterns(new[] {"yyyy MMMM"}, 'Y');
             */

        }

        public override Calendar Calendar
        {
            get { return cal; }
        }

        public override Calendar[] OptionalCalendars
        {
            get { return optionals; }
        }
    }
}

 

سپس متد زیر را به Global.ascx اضافه کنید

       protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var persianCulture = new PersianCulture();
            Thread.CurrentThread.CurrentCulture = persianCulture;
            Thread.CurrentThread.CurrentUICulture = persianCulture;
        }

 

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

  • جمعه 2 مهر 1395
  • 14:31

سلام

از قسمت دوم که تو global کپی کردم خطا میگیره!!!

خطای زیر:

The Name 'Tread' does not exist in the current context

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

  • جمعه 2 مهر 1395
  • 14:33

System.Threading.

رو اضافه کردم اوکی شد

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

  • جمعه 2 مهر 1395
  • 14:57

سلام

همه مراحل بالارو مو به مو انجام دادم ولی اجرا نمیشه

alert(DateTime.Now.ToString());

 

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • جمعه 2 مهر 1395
  • 14:58

تاریخ را از سمت کنترلر به ویو ارسال کنید

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

  • جمعه 2 مهر 1395
  • 15:00

این دستورو تو webform نوشتم کار کرد ولی وقتی میارم MVC عمل نمیکنه!!!

مشکل از کجاست؟

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="ChakavackStaff.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     <h1><%= DateTime.Now.ToString() %></h1>
    </div>
    </form>
</body>
</html>

 

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

  • جمعه 2 مهر 1395
  • 15:25

مرسی از راهنماییتون

مشکلمو حل کردم

تاریخ رو تو کنترلر به یه session پاس دادم و ازش استفاده کردم بصورت زیر:

 System.Web.HttpContext.Current.Session["DateDarkhast"] = DateTime.Now.ToString("yyy/MM/dd");

فرمن yyyy/MM/dd هم دادم که قالب رو بصورت 1395/07/02 نشون بده

بعد تو ویو بصورت زیر استفاده کردم ازش:

 $(document).ready(function () {
        //نمایش تاریخ فارسی
        //PrsTaeidKonandeh   Taeidkonandeh
        var today = '@Session["DateDarkhast"]';
     
        $("#datein").click(function () {

            PersianDatePicker.Show(this, today);

        });
   });

 

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)