How can I reformat date from YYYY to YYYY-MM-DD? - google-sheets

Have a data set with just YYYY format which I need to reformat as YYYY-MM-DD where the day and month are always 01-01.
E.g. a cell for 1750 would be reformatted as 1750-01-01
Entity
Code
Date
Reformatted date
Afghanistan
AFG
1750
1750-01-01
Afghanistan
AFG
1751
1751-01-01
Afghanistan
AFG
1752
1752-01-01
Afghanistan
AFG
1753
1753-01-01
Have tried adding day and month columns and using DATE() function to concatenate, but throws the year to 1905 for some reason (screenshot attached).
Any help would be much appreciated

Google Sheets can't handle dates prior to 1900.
If all you want to do is display the date you could use simple concatenation.
=F1&"-01-01"
That formula will return a string so you won't be able to perform any calculations/comparisons with it without further manipulation.

Related

How to find elapsed time between two datetime values

I working in google sheets. I have already formatted datetime value and separated them in two columns. Now I want to find the time elapsed between these two dates?
date1 : 04/26/21 8:25:00 AM
date2 : 05/01/21 4:46:00 PM
What formula to use in google sheets?
All you need to do is substract the two dates
=H34-G34
Then set the format to Number/Duration of the cell with the formula

get the next date based on frequency set using google sheet formula

I need to display the upcomind date based on the start date and frequency set.
I have tried with
=TODAY() + MOD(TODAY() - C2, F2)
Here is the sheet
Could try:
G2 + F$2-MOD(G2 - C$2, F$2)
where G2 is today's date
Answer:
The upcoming date is given by:
=((((((C2-DATE(1970,1,1))*86400)+(((D2-DATE(1970,1,1))*86400)-((C2-DATE(1970,1,1))*86400))/H2)/60)/60)/24)+DATE(1970,1,1)
This is equivalent to:
(end date) - (start date)
(start date) + ___________________________
(frequency)
Where each date is converted to a unix timestamp for calculation and converted back to date format for display.
Remember that frequency will have to be decremented when each upcoming date passes in order to update the formula to the new upcoming date.
References:
DATE - Docs Editors Help
Unix Time - Wikipedia

Highlight Duplicate Within 24 hours timestamp but a different date

I am trying to figure if the following can be done. If there are duplicate names in the B column then it will see if the date and time were within 24 hours of each other in the A column, if so it will highlight the cell yellow.
Currently, the formula I have will only highlight if it was on the same date. Is there a way I can add to the formula to all take into account time? So that if one response is on 5/20/20 at 17:00 and the next duplicate name is at 5/21/20 at 16:00 then the cell would be highlighted.
Here is the formula I am using the just highlights if it is within the same date:
=ARRAYFORMULA(COUNTIFS(B:B, B2, DATEVALUE(A:A), DATEVALUE(A2))>1)
I am not sure if something like this is possible. I am guessing that the formula would have to compare both datevalue and timevalue. Any help would be appreciated.
Instead of DATEVALUE you can use TO_PURE_NUMBER
This will return you the number of days from January 1, 1900 including the fraction for past hours and minutes opposed to DATEVALUE that rounds the value down to an integral day number.
Sample:
This allows you to calculate the real difference time between your timestamp.
For example like this:
=ARRAYFORMULA(or(COUNTIFS(B:B, B2, TO_PURE_NUMBER(A:A), ">"&TO_PURE_NUMBER(A2)-1, TO_PURE_NUMBER(A:A), "<"&TO_PURE_NUMBER(A2))>0,COUNTIFS(B:B, B2, TO_PURE_NUMBER(A:A), "<"&TO_PURE_NUMBER(A2)+1,TO_PURE_NUMBER(A:A), ">"&TO_PURE_NUMBER(A2))>0))

Google spreadsheet - how to determine timezone using function

How to use a formula to determine the current timezone?
The formula I use gives an unexpected result.
My spreadsheet settings (File > Spreadsheet settings...):
Time zone: (GMT+01:00) Amsterdam
The formula I used:
=TEXT(NOW(),"HH:mm z")
This gives:
12:47 GMT
Local clock time is 12:47, I would expect the formula to show: "12:47 GMT+1".
I also tried Z instead of z, which gives "12:47 +0000", I would expect +1.
Any suggestions?
I need this so I can determine UTC time and convert to Epoch time ("UTC time" - DATE(1970,1,1)*24*60*60)
You can't do that using formulas w/o javascript checking your local timezone.
As per this form:
https://docs.google.com/a/codeproject.com/spreadsheet/ccc?key=0AqhqY231XZd3cFBiY2VqeWdmNWdaX25zN2lpekthQlE&hl=en_US#gid=4
timezone formatting stuff is not supported in TEXT. This spreadsheet was done by one of Stackoverflow contributors, it is not mine.
So... script?
=TEXT( NOW()+x/24 , "DD/MM/YYYY HH:mm:ss" )
=TEXT( NOW()+8/24 , "DD/MM/YYYY HH:mm:ss" )
The (+x/24) after the NOW function will add x hours (in my case 8) to the standard time. NOW()+1 will give you the time tomorrow so working bakc or forward you can set the formula to give different time zones.
Hope this helps,
Robbie

How to automatically format NOW() in to a string that that displays YYYY-MM-DD?

Is it possible to format the output of NOW() to a string that displays YYYY-MM-DD?
This is the output of NOW(): 29/02/2012 12.07.37
The reason is, that I need to use the current date in a QUERY.
QUERY only accepts date in the format YYYY-MM-DD . I can't get a date directly from a cell, because it gets formatted as (even if I change the formatting): DD/MM/YYYY
Perhaps some regular expression?
If this is supposed to be an in-cell formula then you can use
=TEXT(NOW(),"yyyy-mm-dd")
I will follow JMax's suggestion and convert my comment to an answer.
Now() returns the current date and time as a number. The integer part gives the date and the fraction part gives the time. If you print or display that date, the default is to give the full date in what Microsoft think's is the local format.
Format(expn, fmt) allows you to convert an expression to a string. For example:
Dim DateStg as String
DateStg = Format(Now(),"yyyy-mm-dd")
fmt defines the format to which the expn is to be converted. fmt is a mixture of code letters (such as: "yyyy", "mm", "dd") and punctuation (such as "-"). "yyyy-mm-dd" appears to meet your current needs but you can also usethe following to format dates:
"mmm" to give three letter month (Jan, Feb, etc.)
"mmmm" to give full name of month (January, February, etc)
"ddd" to give three letter day of week (Mon, Tue, etc)
"dddd" to give full name of day of week (Monday, Tuesday, etc)
In VB.net you can do the following:
Dim dateStr As String = Now().ToString("yyyy-MM-dd")
In C# you can do it like this:
String dateStr = DateTime.Now.ToString("yyyy-MM-dd");

Resources