I have to display the current date and time in the Master layout of my views.
I 've added the current date and time
<div class="date-time">#{
#Html.Label(string.Format("{0:F}",System.DateTime.Now))
}
</div>
The problem is need to update the time in real time.
It's not updating until I refresh the page.
Here is my java script code
function updateClock() {
var currentTime = new Date();
var currentHours = currentTime.getHours();
var currentMinutes = currentTime.getMinutes();
var currentSeconds = currentTime.getSeconds();
var currentDay = currentTime.getDay();
var currentMonth = currentTime.getMonth();
// Pad the minutes and seconds with leading zeros, if required
currentMinutes = (currentMinutes < 10 ? "0" : "") + currentMinutes;
currentSeconds = (currentSeconds < 10 ? "0" : "") + currentSeconds;
// Choose either "AM" or "PM" as appropriate
var timeOfDay = (currentHours < 12) ? "AM" : "PM";
// Convert the hours component to 12-hour format if needed
currentHours = (currentHours > 12) ? currentHours - 12 : currentHours;
// Convert an hours component of "0" to "12"
currentHours = (currentHours == 0) ? 12 : currentHours;
// Compose the string for display
var currentTimeString = currentHours + ":" + currentMinutes + ":" + currentSeconds + " " + timeOfDay;
return currentTimeString;
}
And the Layout file... Need to add the reference of the javascript file and I have added the bundle.
#Scripts.Render("~/bundles/clock")
<script>
function DiplayClock() {
var currentTime = updateClock();
document.getElementById("clock").firstChild.nodeValue = currentTime;
}
</script>
</head>
<body onload="DiplayClock(); setInterval('DiplayClock()', 1000);">
<div class="date-time">
<span id="clock"> </span>
</div>
</body>
A easy way to do it is:
'document.getElementById("date").innerHTML = new Date().toDateString()'
You have to use javascript.
First declare a timer at the beginning of your .js file:
var objTimer;
after that, you have to set the timeout interval in any initial .js function:
objTimer = setTimeout("DisplayDate()", 1000);
and then, of course, code the DisplayDate() function; something like:
function DisplayDate() {
var objDate = new Date;
var intDate = objDate.getDate();
var intDay = objDate.getDay();
var intMonth = objDate.getMonth();
var intYear = objDate.getYear();
var intHours = objDate.getHours();
var intMinutes = objDate.getMinutes();
var intSeconds = objDate.getSeconds()
var strTimeValue = "" + intHours
strTimeValue += ((intMinutes < 10) ? ":0" : ":") + intMinutes
strTimeValue += ((intSeconds < 10) ? ":0" : ":") + intSeconds
var strDate = intMonth + " " + intDate + ", " + intYear + " " + strTimeValue;
document.getElementById('fcr_spanDateTime').innerHTML = strDate;
}
Hope it helps.
Related
I want to show my date field in a textbox which is coming from Oracle database.
The scenario is, my date stored in DB column is 01-12-17 and its datatype is date.
and while binding it is coming as 1-11-17 I don't know why it's happening like this.
Here is my binding code.
if (getJSONValue.LAUNCH_DATE != "" || getJSONValue.LAUNCH_DATE != null) {
var newDate = new Date(getJSONValue.LAUNCH_DATE);
var day = newDate.getDate();
var month = newDate.getUTCMonth() + 1;
var year = newDate.getFullYear();
$('#txtLaunchDate').val(day + "-" + ((month)) + "-" + year.toString().substr(-2));
}
else {
$('#txtLaunchDate').val("");
}
When you call this :
var newDate = new Date(getJSONValue.LAUNCH_DATE);// if your date is 01-12-2017
the result is : Thu Jan 12 2017 00:00:00
It switches month and day info.
And as you try to add two values it contatenates :
var month = newDate.getUTCMonth() + 1; //returns 1 + 1 as string and the result is 11.
That that is why you see 1-11-17.
If you want a simple solution,
var str = getJSONValue.LAUNCH_DATE; //"01-12-2017";
var array = str.split("-");
var day = array[0];
var month = array[1];
var year = array[2].substr(2);
var dateStr = day + "-" + month + "-" + year;
Use getMonth instead of getUTCMonth:
var newDate = new Date('2017-12-01T00:00:00');
var day = newDate.getDate();
var month = newDate.getMonth()+1;
var year = newDate.getFullYear();
alert(day + "-" + ((month)) + "-" + year.toString().substr(-2));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Try this
var month = (Number(newDate.getUTCMonth()) + 1);
Good day.
I'm very newbie in asp.net/c#/linq/etc, and I'm trying to figure it all out.
But it's need to do one small project.
In my view I have a table with datetime/string values and i need to insert this values to mssql database.
On View I have several Html.TextBox'es. By clicking button, TextBox is filled by current datetime.
View header(JS):
<script type="text/javascript">
function setDate(boxID) {
var dateNow = new Date();
var dd = dateNow.getDate();
var mm = dateNow.getMonth() + 1;
var yy = dateNow.getFullYear();
var hh = dateNow.getHours();
var MM = dateNow.getMinutes();
var ss = dateNow.getSeconds();
if (dd < 10) { dd = '0' + dd }
if (mm < 10) { mm = '0' + mm }
if (MM < 10) { MM = '0' + MM }
if (ss < 10) { ss = '0' + ss }
var today = dd + '-' + mm + '-' + yy + ' ' + hh + ':' + MM + ':' + ss;
document.getElementById(boxID).value = today;
}
</script>
View body:
<div class="divTableCell">
#Html.TextBox("p1_t1")
<input type="button" value="OK" onclick='setDate("p1_t1")' />
</div>
<div class="divTableCell">
#Html.TextBox("p1_notice")
</div>
<button id="result "type="submit">Insert data</button>
By clicking the last button i'm trying to insert this values to external database. Table contains columns p1_notice varchar(250) and p1_t1 datetime;
Controller:
public ActionResult EntranceInspection()
{
return View();
}
EntranceInspectionTableDataContext d = new EntranceInspectionTableDataContext();
public ActionResult EntranceInspectionResult()
{
EntranceInspection s = new EntranceInspection();
s.p1_notice = Request["p1_notice"]; // to SQL - ok
s.p1_t1 = Request["p1_t1"]; // error convert string to datetime
d.EntranceInspection.InsertOnSubmit(s);
d.SubmitChanges();
return View("EntranceInspection");
}
Is there any acceptable way to convert value in textbox to datetime and insert to datetime-column? Or I need to do something different at the start?
Thx
You should type cast the text value into the datetime like below.
s.p1_t1 = Convert.ToDateTime(Request["p1_t1"]);
This will help you to insert datetime value in database without error.
You must convert the text value into the datetime thus:
s.p1_t1 = Convert.ToDateTime(Request["p1_t1"]);
This will help you to insert datetime value in database without error. But, maybe can be usefull you garantie that p1_t1 has not a null value if in database the field is not nullabe.
If it is nullabe, you should insert datemin value or other value that is logical for your business.
You can try the following code ,
public ActionResult EntranceInspectionResult()
{
EntranceInspection s = new EntranceInspection();
s.p1_notice = Request["p1_notice"]; // to SQL - ok
s.p1_t1 = Convert.ToDateTime(Request["p1_t1"]);
d.EntranceInspection.InsertOnSubmit(s);
d.SubmitChanges();
return View("EntranceInspection");
}
I have 4 records in an SQL database. Which has 2 colums hours1 and hours2
Record1 : hours1- 1.00,hours2- 1.00
Record2 : hours1- 9.00,hours2- 5.30
Record3 : hours1- 9.00,hours2- 9.00
Record4 : hours1- 3.00,hours2- 3.00
So here I got the sum of these colums as :
SUM of column1 : 22.00
SUM of column1 : 18.30
These are decimal but I consider it as time.
Now I want to subtract column2 sum from column1 sum i.e.
22.00 - 18.30
So I will get 3.7 which is wrong because I considered as a time.
I want final answer as : 3.30 (justification for requirement : so when I add this result to 18.30 (18.30+3.30 which is 21.60 = 22.00 hours as 60 minute = 1 hour) I got total 22.00).
Can anyone help me how to get 3.30 as result? I cant use TimeFormat.
As everyone said in the comments: conversion is needed, and it must be done before summing takes place.
Here is how:
var times1 = new decimal[] { 1.00m, 9.00m, 9.00m, 3.00m };
var times2 = new decimal[] { 1.00m, 5.30m, 9.00m, 3.00m };
var hours1 = ActualHours(times1).Sum(); // using System.Linq;
var hours2 = ActualHours(times2).Sum();
var diff = hours1 - hours2;
var result = "Actual: hours1 = " + hours1 +
", hours2 = " + hours2 +
", diff = " + diff + "\r\n" +
"Printed: hours1 = " + Print(hours1) +
", hours2 = " + Print(hours2) +
", diff = " + Print(diff);
Methods used:
public IEnumerable<decimal> ActualHours(params decimal[] values)
{
foreach (var v in values)
{
var t = Math.Truncate(v);
yield return t + (v - t) / 0.6m;
}
}
public string Print(decimal v)
{
var t = Math.Truncate(v);
return (t + (v - t) * 0.6m).ToString("0.00");
}
Output:
Actual: hours1 = 22.0, hours2 = 18.5, diff = 3.5
Printed: hours1 = 22.00, hours2 = 18.30, diff = 3.30
I have a WebService which return DateTime Field.
I get a result /Date(1379048144000)/ but
i want just 1379048144000 how can i achieve that.
[WebMethod]
public DateTime GetServerDate()
{
return DateTime.Now;
}
by setting Header Content-Type: application/json; charset=utf-8; i got a result like /Date(1379048144000)/.
You could change your WS to return a long with the value of the DateTime. The value to return is the number of milliseconds since the Unix Epoch (01/01/1970). This could be done with an extension method on DateTime something like:
public static class DateTimeExtensions
{
...
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1);
public static long ToUnixTime(this DateTime dateTime)
{
return (dateTime - UnixEpoch).Ticks / TimeSpan.TicksPerMillisecond;
}
...
}
And your web service method might look something like:
public long GetMyDate(...)
{
DateTime dateTime = ...;
return dateTime.ToUnixTime();
}
with Json.NET :
string date = Newtonsoft.Json.JsonConvert.SerializeObject(DateTime.Now);
in client side you can use this function to show a right date to client(I use it on my projects):
function parseJsonDate(jsonDate) {
var offset = new Date().getTimezoneOffset() * 60000;
var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);
if (parts[2] == undefined) parts[2] = 0;
if (parts[3] == undefined) parts[3] = 0;
d = new Date(+parts[1] + offset + parts[2] * 3600000 + parts[3] * 60000);
date = d.getDate() + 1;
date = date < 10 ? "0" + date : date;
mon = d.getMonth() + 1;
mon = mon < 10 ? "0" + mon : mon;
year = d.getFullYear();
return (date + "." + mon + "." + year);
};
This function is return right date in format: dd.mm.yyyy, but you can change it if you need. I hope that I help you.
U can always solve your problem when sending a date in a JSON object to JS by converting the date as follows:
var myJSDate = (new Date(parseInt(obj.MyDate.substr(6)))).toJSON();
Where obj.Date contains the date you wanna format.
Then u'll get something like this: "2013-10-25T18:04:17.289Z"
U can always check it in Chrome console by writing:
(new Date()).toJSON();
Hope this helps!
There are two solutions:
client side:
function ToJavaScriptDate(value) {
var pattern = /Date\(([^)]+)\)/;
var results = pattern.exec(value);
var dt = new Date(parseFloat(results[1]));
return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
}
It is possible to need alsou to convert into data object
var date = new Date(xxx)
Server side:
Newtonsoft.Json.JsonConvert.SerializeObject(your_object)
Simply write like this to convert your date string in JSON format.
date = "{" + date + "}";
try regex:
var jsonDate = #"/Date(1379048144000)/";
var regex = /-?\d+/;
var jsonDate = re.exec(jsonDate);
var dateOriginal = new Date(parseInt(m[0]));
i have the following Code:
if (v != null && DateTime.Now > v.Besetzt_Von)
{
Debug.WriteLine("Hallo, das ist die Ausgabe! : " + v.Thema + v.Besetzt_Von + v.Besetzt_Bis);
string clientId = GetClientId(req);
DateTime TimeCheck = v.Besetzt_Von;
if (TimeCheck.AddMinutes(30) > v.Besetzt_Von)
{
String hql = "UPDATE Buchung as b " +
"set STORNO = :Storno " +
"where ID IN (SELECT rr.Buchung FROM Raumreservierung rr " +
"where BESETZT_VON = :Von and Raum IN (SELECT r.ID FROM Raum r " +
"join r.Panel pl where pl.ID = :PanelId))";
IQuery query = CurrentSession.CreateQuery(hql);
query.SetParameter("Storno", DateTime.Now);
query.SetParameter("Von", v.Besetzt_Von);
query.SetParameter("PanelId", clientId);
int result = query.ExecuteUpdate();
Debug.WriteLine("Rows affected: " + result);
}
}
I want that if for example Besetzt_Von = 14:00 o'clock, the Query only gets executed if 30 minutes have passed (14:30). I did that with the if clause, but it does not work. The Query is always executing. What iam doing wrong?
change
if (TimeCheck.AddMinutes(30) > v.Besetzt_Von)
which doesn't do anything (this means if v.Besetz_von < v.BesetzVon + 30 minutes, which is of course always true)
to
if (DateTime.Now > v.Besezt_Von.AddMinutes(30))
// DateTime TimeCheck = v.Besetzt_Von; <-- you don't need this
if (DateTime.Now > v.Besetzt_Von.AddMinutes(30))
{
// ...
}