Counter days after installing the game

Hello,

i’m trying make - counter days after installing the game to today.

For example good works:
from 15:30 to 17:42 is 17-15 =2 hours, 42-30=12 min
from 1.03.2013 to 23.03.2013 - days: 23-1=22, month: 3-3 = 0, years 2013 - 2013=0

For example NOT good works:
From 12:59 to 13:05 is 13-12=1 hours 05-59= -54 (is <0 then +60) so 1h 05 min
From 29.03.2013 to 1.04.2013 days 1-29= -28 (is <0 then +31) =3 days monts 4-3=1, 2013-2013=0 = 3 days, 1 month

Can some look and optimized, reapir or comments ?

var FirstPlay:int;

var data_start = Date();
var day_start = data_now.Now.Day;
var month_start = data_now.Now.Month;
var year_start = data_now.Now.Year;
var hours_start = data_now.Now.Hour;
var minutes_start = data_now.Now.Minute;
var seconds_start = data_now.Now.Second;

var data_now = Date();
var day_now = data_now.Now.Day;
var month_now = data_now.Now.Month;
var year_now = data_now.Now.Year;
var hours_now = data_now.Now.Hour;
var minutes_now = data_now.Now.Minute;
var seconds_now = data_now.Now.Second;


FirstPlay = PlayerPrefs.GetInt("FirstPlay");



function Update(){

data_now = Date();
day_now = data_now.Now.Day;
month_now = data_now.Now.Month;
year_now = data_now.Now.Year;
hours_now = data_now.Now.Hour;
minutes_now = data_now.Now.Minute;
seconds_now = data_now.Now.Second;

var minutes = minutes_now - minutes_start;
if (minutes<0){
minutes+=59;
}

var hours = (hours_now *100 + minutes_now - hours_start *100 - minutes_start)/100;
if (hours<0){
hours+=23;
}

var days = day_now - day_start;
if (days<0){
days+=31;
}


var month = month_now - month_start;
if (month<0){
month+=12;
}
			
if (FirstPlay==-1)
{
	FirstTimeLoad();
}


GameObject.Find("GUI_Time").guiText.text = "  Time  " + days + "d " +hours + "h " + minutes +"m";
//GameObject.Find("GUI_Time").guiText.text = hours_start + ":" + minutes_start + " "+ ":" + seconds_start + "    " + hours_now + ":"+minutes_now + " "+ ":"+ seconds_now + "  Time  " + hours + "h" + minutes +"m";
}


function FirstTimeSave()
{
data_start = data_now;
day_start = day_now;
month_start = month_now;
year_start = year_now;
hours_start = hours_now;
minutes_start = minutes_now;
seconds_start = seconds_now;

		PlayerPrefs.SetInt("day_start", day_start);
		PlayerPrefs.SetInt("month_start", month_start);
		PlayerPrefs.SetInt("year_start", year_start);
		PlayerPrefs.SetInt("hours_start", hours_start);
		PlayerPrefs.SetInt("minutes_start", minutes_start);
		PlayerPrefs.SetInt("seconds_start", seconds_start);
												

		FirstPlay =-1;
		PlayerPrefs.SetInt("FirstPlay", FirstPlay);
}


function FirstTimeLoad()
{
data_start = data_now;
day_start = day_now;
month_start = month_now;
year_start = year_now;
hours_start = hours_now;
minutes_start = minutes_now;
seconds_start = seconds_now;

	day_start = PlayerPrefs.GetInt("day_start");
	month_start = PlayerPrefs.GetInt("month_start");
	year_start = PlayerPrefs.GetInt("year_start");
	hours_start = PlayerPrefs.GetInt("hours_start");
	minutes_start = PlayerPrefs.GetInt("minutes_start");
	seconds_start = PlayerPrefs.GetInt("seconds_start");
}

This code could be made a hell of a lot tidier, give me two seconds

This is a quick C# implementation

    private DateTime dateTimeNow; //The Date and Time now
    private DateTime startDate; //The start Date and Time
    private GameObject go; //GameObject we find, cached.

    private void Start()
    {
        // If PlayerPrefs does not have the key "StartDate"
        if (!PlayerPrefs.HasKey("StartDate"))
        {
            //StartDate is the current Date and Time.
            startDate = DateTime.Now;
            //Store the current date and time in PlayerPrefs under the key "StartDate"
            PlayerPrefs.SetString("StartDate", DateTime.Now.ToString());
        }
        else //We have already set the StartDate.
        {
            // The start date and time pulled from PlayerPrefs.
            startDate = DateTime.Parse(PlayerPrefs.GetString("StartDate"));
        }
        // Our current date and time now.
        dateTimeNow = DateTime.Now;
        // GameObject we are going to update.
        go = GameObject.Find("GUI_Time");
    }

    private void GetTimePlayed()
    {
         // Get the duration between the date and time now, and the start date and time.
        TimeSpan duration = dateTimeNow - startDate;
        //Update the guiText to show the duration played.
          go.guiText.text = string.Format("Played for {0} days, {1} hours, {2} minutes, {3} seconds", duration.TotalDays, duration.TotalHours, duration.TotalMinutes, duration.TotalSeconds);
    }

and here is my attempt a UnityScript

    var dateTimeNow : DateTime;
    var startDate : DateTime;
    var go : GameObject;

    function Start()
    {
        if (!PlayerPrefs.HasKey("StartDate"))
        {
            startDate = DateTime.Now;
            PlayerPrefs.SetString("StartDate", DateTime.Now.ToString());
        }
        else
        {
            startDate = DateTime.Parse(PlayerPrefs.GetString("StartDate"));
        }
        dateTimeNow = DateTime.Now;
        go = GameObject.Find("GUI_Time");
    }

    function GetTimePlayed()
    {
        var duration : TimeSpan = dateTimeNow - startDate;
        go.guiText.text = "  Time  " + duration.TotalDays + "d " + duration.TotalDays + "h " + duration.TotalMinutes + "m";
    }

Thanks for reply.

This looks very simple, but there is some errors:

    var dateTimeNow : DateTime;
    var startDate : DateTime;

Assets/SKRYPTY/Time_new.js(1,27): BCE0018: The name ‘DateTime’ does not denote a valid type (‘not found’). Did you mean ‘System.DateTime’?
Assets/SKRYPTY/Time_new.js(2,25): BCE0018: The name ‘DateTime’ does not denote a valid type (‘not found’). Did you mean ‘System.DateTime’?

- I change “DateTime” to “System.DateTime”, it’s works

PlayerPrefs.SetString("StartDate", DateTime.Now.ToString());

- “DateTime.Now” or “DateTimeNow”?

var duration : TimeSpan = dateTimeNow - startDate;

Assets/SKRYPTY/Time_new.js(22,28): BCE0018: The name ‘TimeSpan’ does not denote a valid type (‘not found’). Did you mean ‘Boo.Lang.Compiler.Ast.TimeSpanLiteralExpression’?

- I dont know …

Can help ?

System.TimeSpan

Thanks for reply.
I correnct this script - small fix- becouse days, hours, minutes look like: 0.000324343423443.

It works, but have small error - abnormal time - 811 minutes.

Now I see:
Time 1d 14h 811m

        var dateTimeNow : System.DateTime;
        var startDate : System.DateTime;
        var go : GameObject;
     
        function Start()
        {
            if (!PlayerPrefs.HasKey("StartDate"))
            {
                startDate = System.DateTime.Now;
                PlayerPrefs.SetString("StartDate", System.DateTime.Now.ToString());
            }
            else
            {
                startDate = System.DateTime.Parse(PlayerPrefs.GetString("StartDate"));
            }
            dateTimeNow = System.DateTime.Now;
            go = GameObject.Find("GUI_Time2");
        }
     
        function GetTimePlayed()
        {
            var duration : System.TimeSpan = dateTimeNow - startDate;
            go.guiText.text = "  Time  " + duration.TotalDays.ToString("f0") + "d " + duration.TotalHours.ToString("f0") + "h " + duration.TotalMinutes.ToString("f0") + "m";
        }
		
		function Update()
		{
		GetTimePlayed();
		}

Try that

New version script is too bad.

Now I see:

Time 00d 01h 62m

I clear PlayerPfers and nothing, still errors in minutes…

I fixed the code above, give this a try

Work OK.

When I see my first code and your code - this is awesome.
Now is easly…

Thanks very much

No problem, Good luck :slight_smile: